这是我的第一篇文章。希望你能帮我解决这个愚蠢的问题:
我的桌子上有一些ID车的动作和日期。
我只需要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 :(得分: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
答案 1 :(得分:0)
正确的输出应该是: OUTPUT 在2017/02/15 OUT 2017/04/26 70 在2017/04/26 OUT 2017/10/05 162