聚合函数,最新日期
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;
也许这会奏效。
我有一个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;
也许这会奏效。