聚合函数,最新日期

aggregate function, newest date

我有一个table

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;

(可行,但我只想为一个人创建一条记录)

我该怎么做?

假设每个名字的日期都是唯一的,使用派生的 table 并加入就很简单了,就像这样:

SELECT maxdate, t.name, t.address
from table1 t
inner join
(
    SELECT MAX(date) as maxdate, name
    FROM table1
    GROUP BY name
) d on(t.date = d.maxdate and t.name = d.name)

SQL-Server中你可以在下面使用ROW_NUMBER():

SELECT [date], name, address
FROM (
       SELECT *, 
              ROW_NUMBER() OVER (PARTITION BY name, address ORDER BY [date] DESC) rn
       FROM Table1
     )x
WHERE rn = 1

试试这个

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

尝试使用 DISTINCT

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

也许这会奏效。