我有一个表,其中有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…我绞尽脑汁,用谷歌搜索,但似乎无法进行分项选择、自我加入或分析。任何帮助都是非常感谢的!
发布于 2014-04-05 07:42:46
我想这可能行得通。在没有解析函数的情况下,可能有一个更简单的解决方案,但是我很累,今天是星期五。
SELECT id, cd
FROM
(
SELECT id, cd ,
row_number() over( partition BY id ORDER BY ts DESC) rn
FROM test
)
WHERE rn = 1SqlFiddle
发布于 2014-04-05 08:05:26
其他一些变体:
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)发布于 2014-04-05 08:39:33
为此,Oracle提供了非常方便的KEEP子句:)
select id
, max(cd) keep (dense_rank last order by ts) cd
from my_table
group by idhttps://stackoverflow.com/questions/22874608
复制相似问题