我有一个包含如下数据的表:Name,City,LastUpdated。我希望从表中获取所有数据的名称,但只记录上次更新的最新数据。
例如如果有2条记录
比尔,洛杉矶,2017-09-11
比尔,纽约,2017-09-19
在上面的查询应该只返回Bill,NY,2017-09-19记录。这样我想要所有记录名称不同但最后更新的记录是最新的(降序)。
什么sql查询可以完成这项工作?
答案 0 :(得分:3)
我发布这个主要是因为其他答案/评论似乎与您需要的内容不同。如果您想获得的是与每个名称关联的最新更新,则可以使用以下简单的GROUP BY
查询:
SELECT Name, MAX(LastUpdated)
FROM yourTable
GROUP BY Name
但是如果你想获得每个名字的完整最新记录(即所有列),你会遇到麻烦,因为GROUP BY
只允许我们选择Name
或聚合中的其他列(不是如果另一列可以由Name
唯一确定,则完全正确,但通常为真。这里的规范方法是将原始表作为子查询加入到上面,并过滤除每个名称的最新行之外的所有行。
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT Name, MAX(LastUpdated) AS max_last_updated
FROM yourTable
GROUP BY Name
) t2
ON t1.Name = t2.Name AND
t1.LastUpdated = t2.max_last_updated
答案 1 :(得分:2)
这可以通过两个步骤解决:
查询可以是:
SELECT
t.name,
t.city,
t.last_updated
FROM yourtable t
WHERE t.last_updated = (
SELECT MAX(s.last_updated)
FROM yourtable s
WHERE s.name = t.name
);
答案 2 :(得分:1)
SELECT t1.*
FROM Tablename AS t1
(
SELECT name, MAX(LastUpdated) AS LastUpdated
FROM Tablename
GROUP BY name
) AS t2 INNER JOIN t1.name = t2.name
AND t1.LastUpdated = t2.LastUpdated