我有一张桌子
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;
(它有效,但我想只有一个人的记录)
我该怎么做?
答案 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;
可能会有效。