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 BYROW_NUMBER()の順序付け方法を定義します。

したいかもしれませんがORDER BY StartTime DESC、それはデータによって異なります。

于 2013-08-24T17:07:10.997 に答える