Существует 2 выражения для даты начала и окончания интервала в зависимости от пройденной даты отчета, которые вы можете использовать в своем предложении where
.
Лог c выглядит следующим образом:
1) Если датой отчета является 1-й день месяца, то:
DATE_START
- 16-е число предыдущего месяца
DATE_END
- последний день предыдущего месяца
2) В противном случае :
DATE_START
- 1-е число текущего месяца
DATE_END
- 15-е число текущего месяца
SELECT
REPORT_DATE
, CASE DAY(REPORT_DATE) WHEN 1 THEN REPORT_DATE - 1 MONTH + 15 ELSE REPORT_DATE - DAY(REPORT_DATE) + 1 END AS DATE_START
, CASE DAY(REPORT_DATE) WHEN 1 THEN REPORT_DATE - 1 ELSE REPORT_DATE - DAY(REPORT_DATE) + 15 END AS DATE_END
FROM
(
VALUES
DATE('2020-02-01')
, DATE('2020-02-05')
, DATE('2020-02-16')
) T (REPORT_DATE);
Результат:
|REPORT_DATE|DATE_START|DATE_END |
|-----------|----------|----------|
|2020-02-01 |2020-01-16|2020-01-31|
|2020-02-05 |2020-02-01|2020-02-15|
|2020-02-16 |2020-02-01|2020-02-15|