2017-04-12 76 views
-1

我有兩個表,其中包含一個人的ID,事件的名稱和事件發生的日期。一個表包含事件A和另一個事件B,所以我聯合了這兩個表。其目的就是事件A和B在同一天或者在5日內彼此發生挑出日期:SQL挑選日期

ID  Date  Event 
1234 1/6/2012 B 
1234 1/6/2012 B 
1234 1/6/2012 B 
1234 1/6/2012 B 
1234 9/26/2013 B 
1234 9/26/2013 A 
1234 9/26/2013 B 
1234 9/26/2013 B 
1234 9/26/2013 B 
1234 1/13/2014 A 
1234 1/13/2014 B 
1234 3/20/2015 B 
1234 3/20/2015 A 
1234 12/21/2015 A 
1234 4/12/2016 A 
1234 4/12/2016 B 
1234 1/3/2017 A 
1234 1/3/2017 B 

所以我需要查詢返回:

ID  Date 
1234 9/26/2013 
1234 1/13/2014 
1234 3/20/2015 
1234 4/12/2016 
1234 1/3/2017 

如果以下情況發生後,我需要它選擇較早日期(6/17/2015)並忽略6/19/2015:

ID  Date  Event 
5678 6/17/2015 A 
5678 6/18/2015 B 
5678 6/19/2015 A 

在此先感謝。

+0

請列出您嘗試實現此結果的部分查詢。 –

+0

顯然,使用日期數據類型存儲日期,以防您尚未這樣做。 – Strawberry

+0

另外,您在同一天發生了幾個相同的事件。無法區分它們,這個問題實際上是無法解決的。 – Strawberry

回答

0

這將解決您的問題的第一個場景,其中事件A和B都發生在同一日期。

SELECT id,date 
    FROM 
    ( 
     SELECT DISTINCT id,date,event 
      FROM Yourtable 
    ) 
GROUP BY id,date 
HAVING SUM(CASE WHEN event = 'A' THEN 1 WHEN event = 'B' THEN 1 END) = 2