2

谁能帮助我了解如何为下表构建 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 行。

4

5 回答 5

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

这会枚举行,从最新的日期开始倒数。然后它选择其中一个日期。

于 2012-05-09T15:36:06.927 回答
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评论之后,如果 date+name 不是唯一的,但您只想查看一次名称,

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
于 2012-05-09T15:16:16.547 回答
1

像这样的东西应该工作......

SELECT date, name, score
FROM table a
WHERE date = (
    SELECT MAX(date)
    FROM table b
    WHERE a.name = b.name
)
于 2012-05-09T15:16:18.903 回答
1

您可以使用以下内容:

select date, name, score
from temp t1
where date = (select max(date) from temp where t1.name = temp.name)

查看带有演示的sql fiddle 。

于 2012-05-09T15:18:18.543 回答
-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 格式中不考虑时间的时候

于 2012-05-09T15:25:42.220 回答