2016-07-19 15 views
0

10秒の時間間隔に基づいてテーブルのレコードをグループ化する必要があります。当社グループはランク1の最小時間については、このグループSQLサーバーの10秒の時間間隔に基づくレコード別

Id  DateTime   Rank GroupRank 
1  2011-09-27 18:36:15  1   1 
2  2011-09-27 18:36:15  1   1 
3  2011-09-27 18:36:19  1   1 
4  2011-09-27 18:36:23  1   1 
5  2011-09-27 18:36:26  1   2 
6  2011-09-27 18:36:30  1   2 
7  2011-09-27 18:36:32  1   2 
8  2011-09-27 18:36:14  2   3 
9  2011-09-27 18:36:16  2   3 
10 2011-09-27 18:36:35  2   4 

ようにする必要があり、指定された表

Id  DateTime   Rank 
1  2011-09-27 18:36:15  1 
2  2011-09-27 18:36:15  1 
3  2011-09-27 18:36:19  1 
4  2011-09-27 18:36:23  1 
5  2011-09-27 18:36:26  1 
6  2011-09-27 18:36:30  1 
7  2011-09-27 18:36:32  1 
8  2011-09-27 18:36:14  2 
9  2011-09-27 18:36:16  2 
10 2011-09-27 18:36:35  2 

は18時36分15秒で、午後6時36分24秒に18時36分15秒の間にすべてのレコードことに基づいてグループ内などでなければなりません。

同じテーブルにGroupRankが必要です。それでdense_Rank()Over節で何かになります。 SQLでクエリを書くのに助けてくれる人はいますか?

答えて

0

2つのステップでこれを実行する必要があります。最初は、各レコードを10秒ごとのグループに分け、各ランクの最小時間と秒の差を10で割り、丸めます最も近い整数にする。

SELECT *, 
     SecondGroup = FLOOR(DATEDIFF(SECOND, 
            MIN([DateTime]) OVER(PARTITION BY [Rank]), 
            [DateTime])/10.0) 
FROM #T; 

います:

Id DateTime     Rank SecondGroup 
--------------------------------------------------- 
1 2011-09-27 18:36:15.000  1  0 
2 2011-09-27 18:36:15.000  1  0 
3 2011-09-27 18:36:19.000  1  0 
4 2011-09-27 18:36:23.000  1  0 
5 2011-09-27 18:36:26.000  1  1 
6 2011-09-27 18:36:30.000  1  1 
7 2011-09-27 18:36:32.000  1  1 
8 2011-09-27 18:36:14.000  2  0 
9 2011-09-27 18:36:16.000  2  0 
10 2011-09-27 18:36:35.000  2  2 

を次にあなたがRankSecondGroupしてDENSE_RANK順序付けを行うことができます。

SELECT Id, [DateTime], [Rank], 
     GroupRank = DENSE_RANK() OVER(ORDER BY [Rank], SecondGroup) 
FROM ( SELECT *, 
        SecondGroup = FLOOR(DATEDIFF(SECOND, 
               MIN([DateTime]) OVER(PARTITION BY [Rank]), 
               [DateTime])/10.0) 
      FROM #T 
     ) AS t; 

ご所望の出力を提供します。

サンプルデータ

CREATE TABLE #T (Id INT, [DateTime] DATETIME, [Rank] INT); 

INSERT #T (Id, [DateTime], [Rank]) 
VALUES 
    (1, '2011-09-27 18:36:15', 1), 
    (2, '2011-09-27 18:36:15', 1), 
    (3, '2011-09-27 18:36:19', 1), 
    (4, '2011-09-27 18:36:23', 1), 
    (5, '2011-09-27 18:36:26', 1), 
    (6, '2011-09-27 18:36:30', 1), 
    (7, '2011-09-27 18:36:32', 1), 
    (8, '2011-09-27 18:36:14', 2), 
    (9, '2011-09-27 18:36:16', 2), 
    (10, '2011-09-27 18:36:35', 2); 
関連する問題