2017-09-12 14 views
1

visid、custidおよびvalueの各concactentationは、 "detail"と "confirm"の両方または "detail"のみを持つ場合があります。 それは行を取得してはならないことを、唯一の「詳細」を持っている場合は、他の私はSQLで条件を指定して行を選択

visid  custid value  datetime    value1 
123  456  11  2017-03-01 12:34:11  Detail 
123  456  11  2017-03-01 12:36:11  confirm 
567  342  56  2017-03-01 12:45:11  Detail 
567  342  56  2017-03-01 12:46:11  confirm 
411  124  78  2017-03-01 12:34:11  Detail 

Output: 
visid  custid value  datetime    
123  456  11  00:02:00 (12:36:11 - 12:34:11) 
567  342  56  00:01:00 (12:46:11 - 12:45:11) 

「確認」visid、お客様IDと値の組み合わせは、「詳細」の両方を持っているとき、日付時刻 の違いを見つけてしなければなりません注:411,124および78の最後の行には確認がないので、その行を削除する必要があります。私が試した

問合せ:

select visid, custid, value, concat(visid, custid, value) as session, datetime 
    from table1 
    where datetime between "2017-05-01 00:00:00" and "2017-05-02 00:00:00" 
    and value1 in ('Detail','Confirm') 
+1

使用しているデータベースで質問にタグを付けてください。 –

答えて

0

datetime機能は、データベース固有のものです。自分の場合、自己結合は簡単な方法です。

select td.visid, fd.custid, td.value, concat(visid, custid, value) as session, 
     (tc.datetime - td.datetime) as diff 
from table1 td join 
    table1 tc 
    on td.visid = tc.visid and td.custid = tc.custid and td.value = tc.value and 
     td.value1 = 'Detail' and tc.value1 = 'Confirm'; 

これは、差分の減算を使用しています。正確な機能はデータベースによって異なります。

関連する問題