仅使用Oracle中的LAG检查天数差异

时间:2013-12-04 15:59:47

标签: oracle

我需要一点帮助,但由于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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

为了Google员工:

 TRUNC(DATE_IN) - LAG(TRUNC(DATE_IN)

关键是忽略时间并仅在几天内获得结果。

感谢a_horse_with_no_name的答案,并在此过程中教我关于TRUNC:)