如何从一个sql表中选择一行,其中多列具有相同的值

时间:2017-07-27 18:43:47

标签: sql

我有一个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

4 个答案:

答案 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