2017-10-10 43 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