即使尝试编写此查询,我也无法理解......
如果我有一个名为'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
答案 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
,但这取决于您的数据。