从表SQL中选择多个不同的行

时间:2013-04-07 19:47:25

标签: sql sql-server-2008 select greatest-n-per-group

我正在尝试从数据库中的表中选择不同的(上次更新的)行。我正在尝试为每个" 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)

仅返回最近更新的行的不同行。这是有道理的。

我已经搜索了我正在尝试的内容,并在此处查看了相关帖子。然而,没有设法找到一个真正回答我正在尝试的东西。

2 个答案:

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