我有桌子:
╔════╤════════════╗
║ id │ date ║
╠════╪════════════╣
║ 1 │ 2001-08-01 ║
╟────┼────────────╢
║ 1 │ 2001-09-02 ║
╟────┼────────────╢
║ 1 │ 2001-09-02 ║
╟────┼────────────╢
║ 1 │ 2001-09-01 ║
╟────┼────────────╢
║ 2 │ 2000-01-01 ║
╟────┼────────────╢
║ 3 │ 2000-09-01 ║
╚════╧════════════╝
并希望使用代码
接收最长日期SELECT tt.*
FROM data tt
inner join(
SELECT id, max(data) as lastDate
FROM data
GROUP BY id) groupedtt
ON tt.id = groupedtt.id AND tt.data = groupedtt.lastDate
但通过此代码我得到重复的值,如
╔════╤════════════╗
║ id │ date ║
╠════╪════════════╣
║ 1 │ 2001-09-02 ║
╟────┼────────────╢
║ 1 │ 2001-09-02 ║
╟────┼────────────╢
║ 2 │ 2000-01-01 ║
╟────┼────────────╢
║ 3 │ 2000-09-01 ║
╚════╧════════════╝
我应该改变什么来获得没有像这样的重复的表:
╔════╤════════════╗
║ id │ date ║
╠════╪════════════╣
║ 1 │ 2001-09-02 ║
╟────┼────────────╢
║ 2 │ 2000-01-01 ║
╟────┼────────────╢
║ 3 │ 2000-09-01 ║
╚════╧════════════╝
我正在使用ms sql server
答案 0 :(得分:3)
只需使用您用来加入原始表的查询:
SELECT id, max(date) as [date]
FROM data
GROUP BY id;
答案 1 :(得分:1)
如果您想要整行,请使用row_number()
:
select tt.*
from (select tt.*, row_number() over (partition by id order by data desc) as seqnum
from data tt
) tt
where seqnum = 1;
我猜这个行还有其他你想要的字段,因为你的子查询完全符合你想要的那样。