2017-09-12 101 views
1

visid,custid和value的每個concactentation都可能具有「detail」和「confirm」或僅「detail」。 如果它只有「細節」,這行不應該被檢索,否則我一定要找到日期時間 之間的區別時visid,客戶ID和值的組合,同時擁有「詳細信息」和「確認」在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) 

注意:由於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'; 

這使用減法的差異。確切的功能取決於數據庫。