我有一个包含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…
我一直在绞尽脑汁和谷歌搜索,但似乎无法做出子选择,自我加入或分析工作。非常感谢任何帮助!
答案 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
答案 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