聚合函数,最新日期

时间:2015-08-17 06:42:45

标签: sql aggregate

我有一张桌子

date    name
2014-01-01  AAA
2014-01-01  BBB
2014-01-01  CCC
2014-01-01  DDD
2015-05-05  AAA
2016-09-09  AAA
2016-09-09  BBB

我希望只有关于每个人的最新信息:

date    name
2016-09-09  AAA
2016-09-09  BBB
2014-01-01  CCC
2014-01-01  DDD

我可以简单地写

SELECT MAX(date), name
FROM table1
GROUP BY name;

但如果我想添加另一列,则无效

SELECT MAX(date), name, address
FROM table1
GROUP BY name;

(不起作用)

SELECT MAX(date), name, address
FROM table1
GROUP BY name, address;

(它有效,但我想只有一个人的记录)

我该怎么做?

4 个答案:

答案 0 :(得分:0)

假设每个名称的日期都是唯一的,使用派生表和联接解决起来非常简单,如下所示:

ROW_NUMBER()

答案 1 :(得分:0)

SQL-Server 中,您可以在以下内容中使用SELECT [date], name, address FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY name, address ORDER BY [date] DESC) rn FROM Table1 )x WHERE rn = 1

dir "abc def" 23 """z"""

答案 2 :(得分:0)

试试这个

SELECT * FROM `table1` group by name order by name, date

答案 3 :(得分:0)

尝试使用DISTINCT

SELECT MAX(date), distinct name
FROM table1
GROUP BY name;

可能会有效。