我有一个sql表,当前看起来像这样:
id | Name | Age| City
______________________________
1 | Mike | 26 | New York
2 | Nick | 32 | London
3 | Anne | 22 | New York
4 | Andy | 24 | Lagos
5 | Nickie | 27 | Paris
6 | Sam | 26 | London
我需要查询表格以返回类似:
id | Name | Age| City
______________________________
1 | Mike | 26 | New York
2 | Nick | 32 | London
3 | Andy | 24 | Lagos
4 | Nickie | 27 | Paris
以便特定列(本例中为city)具有相同值的所有行只返回一次(只返回具有相同列值的多行中的一行)。如果我添加时间戳列,那么我只想显示最新的行。我该如何编写这个sql
答案 0 :(得分:2)
SELECT Name, Age, City, MAX(TIME_STAMP_COLUMN) FROM YOUR_TABLE GROUP BY City;
此查询将选择您的所有行,按City
列对其进行分组以删除重复项,然后返回每个具有最大或最新时间戳的分组城市的行。
答案 1 :(得分:2)
如果列号为date_edited类型为TIMESTAMP,则可以编写如下所示的查询。
SET @@sql_mode='ONLY_FULL_GROUP_BY';
SELECT Name, Age,
GROUP_CONCAT(DISTINCT City ORDER BY date_edited DESC) AS city
FROM TABLE_NAME
GROUP BY City
ORDER BY date_edited DESC
答案 2 :(得分:1)
在大多数数据库中,您将使用ANSI标准row_number()
函数:
select t.*
from (select t.*, row_number() over (partition by city order by city) as seqnum
from t
) t
where seqnum = 1;
如果您想要最新的专栏,可以使用order by timestamp desc
。
答案 3 :(得分:1)
如果你在WAMP上按照以下顺序禁用only_full_group_by: 左键单击WAMP图标,MySQL,MySQL设置,SQL模式,用户模式。然后重启你的WAMP服务。然后在重新启动服务后尝试SQL