Вот ситуация:
select sysdate from dual ;
> 30-APR-19
SELECT
count(*)
FROM
event_log
WHERE
edate between to_date('04232019', 'MMDDYYYY') and to_date('04292019', 'MMDDYYYY') ;
> 1156
SELECT
count(*)
FROM
event_log
WHERE
edate between (sysdate-7) and (sysdate-1) ;
> 1276
Это журнал событий, строки отмечены датой (количество строк за предыдущие дни статично).
Мой вопрос - почему счетчики не совпадают? Что мне не хватает? Есть ли какая-то семантическая разница между двумя диапазонами?





SYSDATE — это функция, которая возвращает компоненты даты и времени. Если вы не TRUNCсъели это, вы получите и то, и другое:
SQL> select sysdate,
2 sysdate - 7 prev_week,
3 sysdate - 1 yesterday
4 from dual;
SYSDATE PREV_WEEK YESTERDAY
------------------- ------------------- -------------------
30.04.2019 23:13:14 23.04.2019 23:13:14 29.04.2019 23:13:14
SQL>
Если вы TRUNCсъели это, вы получите полночь:
SQL> select trunc(sysdate) today,
2 trunc(sysdate - 7) prev_week,
3 trunc(sysdate - 1) yesterday
4 from dual;
TODAY PREV_WEEK YESTERDAY
------------------- ------------------- -------------------
30.04.2019 00:00:00 23.04.2019 00:00:00 29.04.2019 00:00:00
SQL>
Это означает, что ваше последнее условие, вероятно, должно быть
where edate between trunc(sysdate-7) and trunc(sysdate-1) ;
идеально. это снимает проблему, Литтлфут. данке шоен!
Bitte, я рад, если это помогло.
Является ли «edate» полем DATETIME? Это бы прояснило это.