【问题标题】:Oracle sql Inner join first record in right tableOracle sql内连接右表中的第一条记录
【发布时间】:2013-12-03 20:31:11
【问题描述】:

我的问题是这样的:

我有两张这样的表:

username | portname | symbol | shares
---------+----------+--------+-------
phil     | test     | APL    | 214
---------+----------+--------+--------

它有更多记录,但这只是一个示例。然后我有另一个像这样的表,每个符号有多个记录

symbol | high | low | timestamp
-------+------+-----+-----------
APL    | 200  | 20  | *timestamp object
APL    | 400  | 34  | *timestamp object

我希望在我加入两者的地方返回一个表,但只加入第二个表的第一行,因此返回如下内容:

symbol | high | low | timestamp
-------+------+-----+----------
APL    | 400  | 34  | *timestamp object

所以只有右表中的一条记录匹配。我已经尝试了很多东西,但没有任何东西可以与 group by 或 distinct 一起使用。

谢谢!

【问题讨论】:

  • 第一行是如何定义的?什么顺序?
  • 按时间戳,所以第二个表中最新添加的行!

标签: sql oracle join inner-join


【解决方案1】:
SELECT t1.symbol, t3.high, t3.low, t3.timestamp 
FROM Table1 t1
JOIN (
      SELECT inn.* 
      FROM (SELECT t2.*, (ROW_NUMBER() OVER(PARTITION BY symbol ORDER BY timestamp DESC)) As Rank 
            FROM Table2 t2) inn 
      WHERE inn.Rank=1
     ) t3
     ON t1.symbol = t3.symbol;  

SQL Fiddle

【讨论】:

猜你喜欢
  • 2018-01-04
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多