我正在尝试从数据库中的表中选择不同的(上次更新的)行。我正在尝试为每个" Sub部分"获取最后更新的行。但是我找不到实现这个目标的方法。
表格如下:
ID | Name |LastUpdated | Section | Sub |
1 | Name1 | 2013-04-07 16:38:18.837 | 1 | 1 |
2 | Name2 | 2013-04-07 15:38:18.837 | 1 | 2 |
3 | Name3 | 2013-04-07 12:38:18.837 | 1 | 1 |
4 | Name4 | 2013-04-07 13:38:18.837 | 1 | 3 |
5 | Name5 | 2013-04-07 17:38:18.837 | 1 | 3 |
我想让我的SQL语句做的是返回行:
1,2和5.
它们与Sub和最新版本不同。
我试过了:
SELECT DISTINCT Sub, LastUpdated, Name
FROM TABLE
WHERE LastUpdated = (SELECT MAX(LastUpdated) FROM TABLE WHERE Section = 1)
仅返回最近更新的行的不同行。这是有道理的。
我已经搜索了我正在尝试的内容,并在此处查看了相关帖子。然而,没有设法找到一个真正回答我正在尝试的东西。
答案 0 :(得分:1)
您可以使用row_number()
窗口函数为具有相同Sub值的每个行分区分配数字。使用order by LastUpdated desc
,第一行的行将是最新的行:
select *
from (
select row_number() over (
partition by Sub
order by LastUpdated desc) as rn
, *
from YourTable
) as SubQueryAlias
where rn = 1
答案 1 :(得分:-1)
使用group by不够吗?
SELECT DISTINCT MIN(Sub), MAX(LastUpdated), MIN(NAME) FROM TABLE GROUP BY Sub Where Section = 1