2017-10-10 41 views
0

這是我的第一篇文章。希望你能幫助我這個愚蠢的問題:瞭解自我加入查詢

我有這張桌上有一些身份證汽車的動作和日期。

enter image description here

我只需要ID 'IN'和ID 'OUT'之間的時間間隔。

這是我的查詢和我得到的結果。

SELECT 
    T1.ID, T1.DATE_ID, T2.ID as ID_2, T2.DATE_ID AS DATE_2, 
    DATEDIFF("D", T1.DATE_ID, T2.DATE_ID) AS DaysDiff 
FROM  
    My database T1 
JOIN 
    My database T2 ON T1.ID = 'IN' AND T2.ID = 'OUT' 
WHERE 
    T1.DATE_ID >= '2017/01/01' AND T2.DATE_ID >= '2017/01/01' 
GROUP BY 
    T1.ID, T1.DATE_ID, T2.ID, T2.DATE_ID 
ORDER BY 
    DATE_ID 

輸出:

ID DATE   ID_2  DATE_2  DaysDiff 
------------------------------------------------- 
IN 2017/02/15 OUT  2017/04/26 70 
IN 2017/02/15 OUT  2017/10/05 232 
IN 2017/04/26 OUT  2017/04/26  0   
IN 2017/04/26 OUT  2017/10/05 162 

問題是,爲什麼我得到的額外行(第二和第三),我如何解僱他們?

非常感謝提前。

回答

0

看來你錯過了條件T1.DATE_ID < T2.DATE_ID

SELECT T1.ID, T1.DATE_ID, T2.ID as ID_2, T2.DATE_ID AS DATE_2, 
     DATEDIFF("D", T1.DATE_ID, T2.DATE_ID) AS DaysDiff 

FROM My database T1 
JOIN My database T2 ON T1.ID = 'IN' 
     and T2.ID = 'OUT' 

WHERE T1.DATE_ID >= '2017/01/01' and T2.DATE_ID >= '2017/01/01' 
AND T1.DATE_ID < T2.DATE_ID 
group by T1.ID, T1.DATE_ID, T2.ID, T2.DATE_ID 
order by DATE_ID