如何在Oracle 11g中使用分组返回最大值

时间:2014-04-04 23:21:55

标签: sql oracle

我有一个包含3列的表,还有比这更多的数据行:

ID  CD     TS
----------------------
1    A  2/28/2014 10:14
1    B  3/25/2014 13:21
2    C  3/3/2014 10:15
2    D  3/3/2014 13:48

我正在寻找能够返回最大(TS)CD值的任何内容,按ID分组。结果将如下所示:

ID  CD
----------
1   B
2   D
n…  n…

我一直在绞尽脑汁和谷歌搜索,但似乎无法做出子选择,自我加入或分析工作。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

我认为这可行。可能有一个更简单的解决方案,没有分析功能,但我很累,周五。

SELECT id, cd
FROM
(
   SELECT id, cd ,
   row_number() over( partition BY id ORDER BY ts DESC) rn
   FROM test
 )
WHERE rn = 1

SqlFiddle

答案 1 :(得分:0)

其他一些变体:

SELECT id, CD
  FROM my_table a
  WHERE ts = (SELECT MAX(ts)
                FROM my_table b
                WHERE b.id = a.id
                GROUP BY id)

另:

WITH oldest AS (
  SELECT id, MAX(ts) AS ts
    FROM my_table b
    GROUP BY id)
SELECT id, CD
  FROM my_table a
  JOIN oldest b ON (a.id = b.id AND a.ts = b.ts)

答案 2 :(得分:0)

Oracle有这样的hande KEEP子句:)

select id
,      max(cd) keep (dense_rank last order by ts) cd
from   my_table
group by id