获取最后一行

时间:2013-08-24 17:05:03

标签: sql sql-server sql-server-2008 tsql

即使尝试编写此查询,我也无法理解......

如果我有一个名为'WaitTable'的表,那么:

Id  StartTime           EndTime             ShopName        Request    WaitTime
-------------------------------------------------------------------------------------------------    
1   2013-08-24 19:30    2013-08-24 19:45    ClothesShop1    1          10
2   2013-08-24 19:30    2013-08-24 19:45    ClothesShop1    2          15
3   2013-08-24 19:30    2013-08-24 19:45    ClothesShop1    3          3
4   2013-08-24 19:45    2013-08-24 20:00    ClothesShop1    1          12
5   2013-08-24 19:45    2013-08-24 20:00    ClothesShop1    2          17

我想获得所有最后的独特请求,以获得他们最后记录的等待时间。

例如,我想回复:

Id  StartTime           EndTime             ShopName        Request     WaitTime
-------------------------------------------------------------------------------------------------    
3   2013-08-24 19:30    2013-08-24 19:45    ClothesShop1    3           3
4   2013-08-24 19:45    2013-08-24 20:00    ClothesShop1    1           12
5   2013-08-24 19:45    2013-08-24 20:00    ClothesShop1    2           17

1 个答案:

答案 0 :(得分:3)

您可以使用ROW_NUMBER()功能执行此操作:

SELECT *
FROM (SELECT *,ROW_NUMBER() OVER(PARTITION BY Request ORDER BY Id DESC)'RowNum'
      FROM YourTable
      )sub
WHERE RowNum = 1

演示:SQL Fiddle

PARTITION BY定义了将重新开始编号的组。也就是说,Request的每个值的编号都从1开始,然后上升。

ORDER BY定义了ROW_NUMBER()的排序方式。

您可能需要ORDER BY StartTime DESC,但这取决于您的数据。