任何人都可以帮助我知道如何为下面的表构建sql查询以获取具有最新日期的不同行(基于名称和日期)。
Date Name Score
2011-06-16 10:30 Johan 36
2010-12-09 08:52 Thomas 32
2012-04-25 15:14 Jak 56
2008-09-07 11:57 Jak 64
2012-02-28 13:22 Jan 23
2011-01-11 12:08 Thomas 22
2008-10-06 12:22 Kane 54
因此,查询将显示第1,3,6,7行。
答案 0 :(得分:2)
由于最大日期重复的问题,我正在做出贡献。以上所有都返回所有重复项。提问者可能只想要其中一行。
SELECT date, name, score
FROM (select *,
row_number() over (partition by name order by date desc) as seqnum
from table a
) a
WHERE seqnum = 1
这将枚举行,从最新日期向后计数开始。然后选择其中一个日期。
答案 1 :(得分:1)
假设您的RDMS不支持窗口功能,
SELECT a.*
FROM table1 a
INNER JOIN
(
SELECT name,MAX(date) as max_date -- date field may need escaping
FROM table1 a
GROUP BY name
)b ON (b.name = a.name AND a.date=b.max_date)
<强>更新强>
关注 Dems 评论,如果日期+名称不是唯一的,但您只想查看一次名称,
SELECT c.name,c.date, MAX(c.score) as max_score
FROM
(
SELECT a.*
FROM table1 a
INNER JOIN
(
SELECT name,MAX(date) as max_date -- date field may need escaping
FROM table1 a
GROUP BY name
)b ON (b.name = a.name AND a.date=b.max_date)
)c
答案 2 :(得分:1)
这样的事情应该有用......
SELECT date, name, score
FROM table a
WHERE date = (
SELECT MAX(date)
FROM table b
WHERE a.name = b.name
)
答案 3 :(得分:1)
您可以使用以下内容:
select date, name, score
from temp t1
where date = (select max(date) from temp where t1.name = temp.name)
通过演示查看sql fiddle。
答案 4 :(得分:-1)
select convert(varchar,date,103) as name_date, name from table1 where convert(varchar, date, 103) = (select convert(varchar,max(date),103) as n_date from table1)
这是在mssql数据库sql格式中不考虑时间的时候