2016-12-04 6 views
-2

私はあなたの助けが必要です。 私はSQL Server 2012を使用しています。 このクエリはログアプリケーション用です。 私はこのようなテーブルを持っています:T SQLクエリ。日付欄に開始日/終了日を指定してください

これは2つのrequestidを持つサンプルで、私が得たい結果です。

私はすべての週末にそれに取り組んでいますが、解決策がまだ見つかりませんでした。 SQL Server 2012の遅延と先行機能を試しましたが、機能しません。

IF OBJECT_ID('tempdb..#test', 'U') IS NOT NULL 
DROP TABLE #test; 

CREATE TABLE #test 
(
    requestid INT, 
    eventdate DATETIME, 
    eventname VARCHAR(20) 
); 

INSERT #test 
(
    requestid, 
    eventdate, 
    eventname 
) 
VALUES 
(46444, '2016/08/08 10:20:33.000', 'OPENED'), 
(46444, '2016/08/08 10:33:10.000', 'REVIEWED'), 
(46444, '2016/08/08 11:09:55.000', 'OPENED'), 
(46444, '2016/08/08 11:32:41.000', 'REVIEWED'), 
(46444, '2016/08/08 11:39:01.000', 'CLOSED'), 
(46444, '2016/08/08 15:00:04.000', 'OPENED'), 
(46444, '2016/08/08 15:17:40.000', 'REVIEWED'), 
(46444, '2016/08/08 15:29:36.000', 'OPENED'), 
(46444, '2016/08/08 15:31:34.000', 'REVIEWED'), 
(46444, '2016/08/08 15:36:37.000', 'CLOSED'), 
(46444, '2016/08/08 17:04:27.000', 'OPENED'), 
(46445, '2016/08/10 09:00:00.000', 'OPENED'), 
(46445, '2016/08/11 01:33:10.000', 'REVIEWED'), 
(46445, '2016/08/12 15:36:37.000', 'CLOSED'); 

select * 
from #test 

結果

requestid eventdate   eventname CLOSEDDate  CLOSEDEventname 
46444 2016-08-08 10:33:10.000 REVIEWED 2016-08-08 11:39:01.000 CLOSED 
46444 2016-08-08 15:17:40.000 REVIEWED 2016-08-08 15:36:37.000 CLOSED 
46445 2016-08-11 01:33:10.000 REVIEWED 2016-08-12 15:36:37.000 CLOSED 
+1

質問を編集し、列のロジックを入力してください。 –

答えて

1

私はあなたが望むように見えるものを見ることができます。休暇日ごとに、その休暇の最も早い審査日が必要です。あなただけのグループを割り当てることが閉じを列挙して、集約することで、これをで行うことができます。

select requestid, 
     min(case when eventname = 'REVIEWED' then eventdate end) as eventdate, 
     'REVIEWED' as event, 
     max(eventdate) as closedate, 
     'CLOSED' as closedeventname 
from (select t.*, 
      sum(case when eventname = 'CLOSED' then 1 else 0 end) over (partition by requestid order by eventdate desc) as grp 
     from #test t 
    ) t 
group by requestid, grp; 
Having min(case when eventname = 'REVIEWED' then eventdate end) is not null 

私は、これはあなたが望む出力を生成することをかなり確信しています。質問に必要な追加のルールを指定できなかった場合は、質問をよくお読みください。

+0

Yeees !!!!!まさに私が欲しいもの。ありがとうジョンとゴードン – Lidou123

関連する問題