Как выбрать минимальные даты в периоде

Рейтинг: -3Ответов: 1Опубликовано: 22.08.2023

Добрый день требуется выбрать минимальную дату в интервале даты +-7 дней

id  number      date
1   97236732    07.06.0023
2   97236732    09.06.0023
3   97236732    09.06.0023
4   97236732    21.06.0023

Т.е пофакту требуется чтобы были записи 1 и 4 из таблицы

Ответы

▲ 1Принят

Возможная реализация:

WITH
source (dt) AS (
  SELECT TO_TIMESTAMP('2023-01-01', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-02', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-05', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-09', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-15', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-16', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-17', 'YYYY-MM-DD') FROM DUAL UNION ALL
  SELECT TO_TIMESTAMP('2023-01-27', 'YYYY-MM-DD') FROM DUAL
 ),
recurse (dt, step) AS (
  SELECT dt, 1
  FROM source
  UNION ALL
  SELECT source.dt, recurse.step + 1
  FROM source
  JOIN recurse ON source.dt >= recurse.dt + INTERVAL '7' DAY
)
SELECT TO_CHAR(MIN(dt), 'YYYY-MM-DD') dt
FROM recurse
GROUP BY step
DT
2023-01-01
2023-01-09
2023-01-16
2023-01-27

fiddle