1

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

如果我有一个名为“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
4

1 回答 1

3

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

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

演示:SQL 小提琴

PARTITION BY定义编号将重新开始的组。即,每个值的Request编号都从 1 开始向上递增。

ORDER BY定义将如何ROW_NUMBER()排序。

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

于 2013-08-24T17:07:10.997 回答