Мне нужна помощь, но я очень близок к достижению того, что ищу, благодаря this post. Однако это не совсем то, что мне нужно.Проверка разницы только в днях с LAG в Oracle
Использование 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, время должно игнорировать. Я попытался TO_CHAR (DATE_IN .......) в LAG, чтобы избавиться от временной части, но, конечно же, это не сработало: p
Спасибо за вашу помощь.
использования 'TRUNC (date_in)' –
@a_horse_with_no_name Так просто, и именно то, что я искал ... Спасибо! – oceansmoon