@ssssoygo

Как составить SQL запрос с разбиением дат на несколько?

Добрый день! Есть следующая таблица:

ID | Дата_начала | Дата_окончания | Кол-во
--------------------------------------------------------------------------------
55 | 2024-09-17 11:52:17.000 | 2024-12-17 11:52:17.000 | 3
42 | 2024-06-10 14:52:19.000| 2024-07-10 14:52:19.000 | 1

Нужно вывести селектом таблицу в след.виде:
ID | Дата |Кол-во
----------------------------------------------
55 | 2024-09-17 11:52:17.000 | 3
55 | 2024-10-17 11:52:17.000 | 3
55 | 2024-11-17 11:52:17.000 | 3
42 | 2024-06-10 14:52:19.000 | 1

Т.е., вывести месяцы между Дата_начала и Дата_окончания. В Кол-во хранится кол-во месяцев между Дата_начала и Дата_окончания.

Подскажите, как можно вывести в таком виде?
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
@ssssoygo Автор вопроса
В итоге ChatGPT подсказал, его запрос подошел

SELECT 
    t.ID, 
    ADD_MONTHS(t.Дата_начала, LEVEL - 1) AS Дата, 
    t."Кол-во"
FROM 
    your_table t
CONNECT BY 
    LEVEL <= t."Кол-во" + 1
    AND PRIOR t.ID = t.ID
    AND PRIOR sys_guid() IS NOT NULL
START WITH 
    1 = 1
ORDER BY 
    t.ID, Дата;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
-- Тестовая выборка
with t as (select to_date('2024-09-17 11:52:17', 'yyyy-mm-dd hh24:mi:ss') begin_date, to_date('2024-12-17 11:52:17', 'yyyy-mm-dd hh24:mi:ss') end_date, 3 Cnt from dual union
select to_date('2024-06-10 14:52:19', 'yyyy-mm-dd hh24:mi:ss') begin_date, to_date('2024-07-10 14:52:19', 'yyyy-mm-dd hh24:mi:ss') end_date, 1 Cnt from dual)
-- Иерархический запрос
select distinct T.*,
       add_Months(T.Begin_Date, Level - 1) as Current_Date, -- отсчет месяцев
       Level as Current_Val  -- текущее значение отсчета
  from T
  CONNECT BY add_Months(T.Begin_Date, Level) <= T.End_Date
order siblings by T.Begin_Date desc
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы