我需要一点帮助,但由于this post,我非常接近实现我正在寻找的东西。但是,这并不是我需要的输出。
使用LAG检查日期差异,我需要LAG忽略时间差异并仅考虑日期。换句话说,它应该只考虑日历日,而不是24小时日。有没有办法实现这个目标?
这是我到目前为止所得到的:
SELECT EMPLOYEE_ID,
SUM(DIFFERENCE) AS DAYS,
DATE_IN,
DATE_OUT
FROM (
SELECT *
FROM (
SELECT EMPLOYEE_ID, DATE_IN, DATE_OUT, ACTIVE,
NVL(DATE_IN - LAG(DATE_IN) OVER (PARTITION BY EMPLOYEE_ID, ACTIVE ORDER BY DATE_IN), 1) AS DIFFERENCE
FROM MY_TABLE
WHERE MY_TABLE.ACTIVE = 1
AND TO_CHAR(DATE_IN, 'YYYY-MM-DD') >= 'user-selected date'
AND TO_CHAR(DATE_OUT, 'YYYY-MM-DD') <= 'other user-selected date'
)
)
GROUP BY EMPLOYEE_ID, DATE_IN, DATE_OUT
ORDER BY DATE_IN
我得到的输出:
EMPLOYEE_ID | DIFFERENCE | DATE_IN | DATE_OUT
000199 1 2013/11/25 08:41:00 2013/11/25 16:41:00
000199 0.970833333333333 2013/11/26 07:59:00 2013/11/26 15:59:00
000199 1 2013/11/27 07:59:00 2013/11/27 15:59:00
000199 1.00069444444444 2013/11/28 08:00:00 2013/11/28 16:00:00
000199 1 2013/11/29 08:00:00 2013/11/29 16:00:00
我在寻找:
这里的差异应该都是1,时间应该被忽略。我在LAG中尝试过TO_CHAR(DATE_IN .......)以摆脱时间部分但当然不起作用:p
感谢您的帮助。
答案 0 :(得分:0)
为了Google员工:
TRUNC(DATE_IN) - LAG(TRUNC(DATE_IN)
关键是忽略时间并仅在几天内获得结果。
感谢a_horse_with_no_name的答案,并在此过程中教我关于TRUNC:)