2016-12-05 10 views
0

次の順序付けられたデータセット(1分間隔)を指定すると、Microsoft SQL Serverを使用して特定のアイテムのすべての個別コードを追加し、要約は以下の通りですか?パーティション上で何らかの集約関数を使用できるはずだと思っていますが、どこから開始するのか分かりません。SQL Serverを使用してサマリーを生成する行を追加します

DateTimedatetimeであり、残りの列はvarcharであることに注意してください。私はSQL Server 2012 Expressを使用しています。

入力データ:

DateTime    Item  Code Description 
2016-12-02 16:34:00 0   1  Some Description 
2016-12-02 16:35:00 0   1  Some Description 
2016-12-02 16:36:00 0   1  Some Description 
2016-12-02 16:37:00 0   1  Some Description 
2016-12-02 16:38:00 0   1  Some Description 
2016-12-02 16:39:00 0   1  Some Description 
2016-12-02 16:40:00 0   2  Some Description 
2016-12-02 16:41:00 0   2  Some Description 
2016-12-02 16:42:00 0   2  Some Description 
2016-12-02 16:43:00 0   4  Some Description 
2016-12-02 16:44:00 0   4  Some Description 
2016-12-02 16:45:00 0   4  Some Description 
2016-12-02 16:46:00 0   4  Some Description 
2016-12-02 16:47:00 0   4  Some Description 
2016-12-02 16:48:00 1   1  Some Description 
2016-12-02 16:49:00 1   2  Some Description 
2016-12-02 16:50:00 1   2  Some Description 
2016-12-02 16:51:00 1   2  Some Description 
2016-12-02 16:52:00 1   2  Some Description 
2016-12-02 16:53:00 1   3  Some Description 
2016-12-02 16:54:00 0   1  Some Description 
2016-12-02 16:55:00 0   1  Some Description 
2016-12-02 16:56:00 0   1  Some Description 
2016-12-02 16:57:00 0   8  Some Description 
2016-12-02 16:58:00 0   8  Some Description 
2016-12-02 16:59:00 0   8  Some Description 
2016-12-02 17:00:00 0   6  Some Description 
2016-12-02 17:01:00 0   6  Some Description 

期待される出力データ(コードの最後に出現するなければならないコードおよび終了日付の最初の発生の日時でなければならない開始日):

Start DT    End DT    Item  Code Description 
2016-12-02 16:34:00 2016-12-02 16:39:00 0   1  Some Description 
2016-12-02 16:40:00 2016-12-02 16:42:00 0   2  Some Description 
2016-12-02 16:43:00 2016-12-02 16:47:00 0   4  Some Description 
2016-12-02 16:48:00 2016-12-02 16:49:00 1   1  Some Description 
2016-12-02 16:50:00 2016-12-02 16:52:00 1   2  Some Description 
2016-12-02 16:53:00 2016-12-02 16:53:00 1   3  Some Description 
2016-12-02 16:54:00 2016-12-02 16:56:00 0   1  Some Description 
2016-12-02 16:57:00 2016-12-02 16:59:00 0   8  Some Description 
2016-12-02 17:00:00 2016-12-02 17:01:00 0   6  Some Description 
+2

あなたがサンプルデータにいくつかの実際の日付を供給することができればそれは素晴らしいことです。 –

+1

Appelsフェリックス、私はテストなどを支援するために含まれていたはずですが、私は今datetimeを含んでいます。 – beliskna

答えて

2

あなたが望むのは、連続した日付の島をグループ化することです。 Hereは、この問題に対する解決策を提供していジェフMODENによって書かれた記事です:

WITH Cte AS(
    SELECT *, 
     rn = DATEADD(MINUTE, - ROW_NUMBER() OVER(PARTITION BY Item, Code ORDER BY DateTime), Datetime) 
    FROM Data 
) 
SELECT 
    StartDate = MIN(DateTime), 
    EndDate  = MAX(DateTime), 
    Item, 
    Code, 
    Description = MAX(Description) 
FROM Cte 
GROUP BY 
    Item, Code, rn 
ORDER BY 
    StartDate, EndDate; 

ONLINE DEMO

+0

Felixの入力をありがとう、私はそれをチェックアウトする! – beliskna

関連する問題