2017-07-07 8 views
1

からの経過時間を表示私は特定のsubsymptom後に私は私のデータを持っているすべてのレコードを表示することができますいくつかのコードを作成しているSQL - 作成された特定のレコード(新しい列)

SELECT 
ID, 
Received, 
Closed, 
Subsymptom, 
DATEDIFF(HOUR, received, COALESCE(closed, GETDATE())) AS 'HoursOpen' 
FROM 
    vw_UserView_OpenAndClosed A 
WHERE closed > 
(SELECT MAX(closed) 
FROM  
    vw_UserView_OpenAndClosed SUB 
WHERE 
    Subsymptom = 'INSTALL' 
    AND received >= '2017-06-01' 
    AND SUB.name = A.name) 

は、データは次のようになります私が行うことができるようにしたいどのような

ID  received closed  Subsymptom   HoursOpen 
1306438 2017-06-20 2017-06-21 ISSUES    19 
1305393 2017-06-18 2017-06-19 REQUEST    12  
1299203 2017-06-05 2017-06-05 REQUEST    0 
1299415 2017-06-05 2017-06-06 SPECIFIC FAILURE  2 

は、「インストール」という名前の元subsymptomが発生したから経過した時間を私に告げる新しい列を作成することです。

IDは、ギャップを有することができ、私は、複数の「名前」

を持つことになり、私は(閉じた状態)を選択マックスを試してみました参加私はそれがすべてで仕事を得るカントと私は完全に間違って上だと思っトラックといくつかの心がぼやけている。

例のデータ

ID  Received Closed  Subsymptom  Name  
1306438 2017-06-20 2017-06-21 ISSUES   BROOM  
1299203 2017-06-05 2017-06-05 REQUEST   BROOM  
1305393 2017-06-18 2017-06-19 REQUEST   CHIVE  
1299415 2017-06-06 2017-06-06 SPECIFIC FAILURE BROOM  
1299222 2017-06-05 2017-06-05 ISSUES   BROOM  
1299112 2017-06-05 2017-06-05 CONTACTLESS  BROOM 
1279168 2017-06-01 2017-06-03 INSTALL   BROOM 
1287965 2017-06-10 2017-06-10 INSTALL   CHIVE 

結果は、以来、閉鎖インストール受け

ID  Received Closed  Subsymptom  Name  HoursOpen Days Received since Install Closed 
1306438 2017-06-20 2017-06-21 ISSUES   BROOM 19   17 
1299203 2017-06-05 2017-06-05 REQUEST   BROOM 0   2 
1305393 2017-06-18 2017-06-19 REQUEST   CHIVE 12   21 
1299415 2017-06-06 2017-06-06 SPECIFIC FAILURE BROOM 2   3 
1299222 2017-06-05 2017-06-05 ISSUES   BROOM 0   2 
1299112 2017-06-05 2017-06-05 ISSUES   BROOM 0   2 

日を希望 - INSTALL近い日付から受け取った日付に日量を算出します。

は(この後は0日目、1、2、3などで受信された新しいレコードをインストールした後ことを示すためにグラフ化されます)

+0

サンプルデータ(クエリの結果ではなく、vw_UserView_OpenAndClosedのデータ)を含めると便利です –

+1

良いアドバイス、ありがとうございます。あなたの答えを現時点で確認して、有望なものを見てください:) – Michael

+0

偉大な - あなたが変更が必要かどうか私に教えてください! –

答えて

1

EDIT:あなたのコメントを明確にし、要求されたサンプル・データを追加していただきありがとうございます。それは私がいったんそれを持っていればそれは簡単でした。だから、将来的には、あなたの質問を投稿するときにそれを追加して、最速の応答を確実にしてください!ここで

はコードです:ここでは

DECLARE @Table TABLE (ID bigint, Received DATETIME, Closed DATETIME, Subsymptom varchar(50), [Name] varchar(50)) 
DECLARE @Now DateTime = GETDATE() 

INSERT INTO @Table 
VALUES 
(1306438 , '2017-06-20', '2017-06-21', 'ISSUES', 'BROOM'), 
(1299203 , '2017-06-05', '2017-06-05', 'REQUEST', 'BROOM'), 
(1305393 , '2017-06-18', '2017-06-19', 'REQUEST', 'CHIVE'), 
(1299415 , '2017-06-06', '2017-06-06', 'SPECIFIC FAILURE', 'BROOM'), 
(1299222 , '2017-06-05', '2017-06-05', 'ISSUES', 'BROOM'), 
(1299112, '2017-06-05', '2017-06-05', 'CONTACTLESS', 'BROOM'), 
(1279168 , '2017-06-01', '2017-06-03', 'INSTALL', 'BROOM'), 
(1287965 , '2017-06-10', '2017-06-10', 'INSTALL', 'CHIVE') 

SELECT T.ID, 
     T.Received, 
     T.Closed, 
     T.Subsymptom, 
     T.[Name], 
     DATEDIFF(HH, T.Received, COALESCE(T.Closed, @Now)) AS 'HoursOpen', 
     DATEDIFF(DD, T2.Closed, T.Received) AS [Days Received since Install Closed] 
FROM @Table T 
JOIN @Table T2 
    ON T.[Name] = T2.[Name] 
    AND T2.Subsymptom = 'INSTALL' 
WHERE T.Closed > T2.Closed 

結果は以下のとおりです。あなたが保証している何

(6 row(s) affected) 
ID     Received    Closed     Subsymptom           Name            HoursOpen Days Received since Install Closed 
-------------------- ----------------------- ----------------------- -------------------------------------------------- -------------------------------------------------- ----------- ---------------------------------- 
1306438    2017-06-20 00:00:00.000 2017-06-21 00:00:00.000 ISSUES            BROOM            24   17 
1299203    2017-06-05 00:00:00.000 2017-06-05 00:00:00.000 REQUEST           BROOM            0   2 
1305393    2017-06-18 00:00:00.000 2017-06-19 00:00:00.000 REQUEST           CHIVE            24   8 
1299415    2017-06-06 00:00:00.000 2017-06-06 00:00:00.000 SPECIFIC FAILURE         BROOM            0   3 
1299222    2017-06-05 00:00:00.000 2017-06-05 00:00:00.000 ISSUES            BROOM            0   2 
1299112    2017-06-05 00:00:00.000 2017-06-05 00:00:00.000 CONTACTLESS          BROOM            0   2 

(6 row(s) affected) 

は、各名前のために「インストール」Subsymptomの1つのインスタンスがあるだろうということです。その場合、このクエリは常に機能します。私の結果があなたのものと異なる理由は、あなたがDateTimesではなく日付のみを提供したためです。そのため、計算はわずかにオフになります。しかし、基本的には、各レコードを元のインストールに結合するだけです。元のレコードのクローズ時間を取得し、現在のレコードの受信時間と比較します。非常にシンプルで簡単です。

これはあなたが探しているものでない場合は教えてください。

+0

結合は、インストールレコードを受信した日ではなく、レコードを受信した日付から「受信済み」を計算します。クロス・アプライは全く結果を返しません。それは、クロス・アプライはより実行可能ですが、微調整が必​​要だと私は言っていました。私はそれをちょっと遊んで何が起こるかを見て、あなたに戻ってきます – Michael

+0

@マイケルは理解しています。いくつかのサンプルデータ(および期待どおりの結果)を提供していただければ、これは非常に簡単に更新することができます。または、それを自分で調整することもできます。私はもう5時間はここにいる...:) –

+0

サンプルデータと予想される結果を元の投稿に追加しました – Michael

関連する問題