Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ezhov-da/6bdf4f58cd11dc5ebaa2c0c2aca85288 to your computer and use it in GitHub Desktop.
Save ezhov-da/6bdf4f58cd11dc5ebaa2c0c2aca85288 to your computer and use it in GitHub Desktop.
перестроение столбца из длины в ширину
Решение SQL задачи на перестроение столбца из длины в ширину при наличии идентификатора понимания 1 и 2 значения:
Задача:
Дана таблица:
ID ДАТА ПОРЯДОК
1 10 1
1 12 2
1 14 1
1 16 2
2 18 1
2 20 2
2 22 1
2 24 2
3 26 1
3 28 2
3 30 1
3 32 2
Необходимо преобразовать ее к виду:
ID ДАТА С ДАТА ПО РАЗНИЦА
1 10 12 2
1 14 16 2
2 18 20 2
2 22 24 2
3 26 28 2
3 30 32 2
Решение:
Для исходных данных вывести даты для 1 и 2 в разные столбцы:
select
ID
,ДАТА
,ПОРЯДОК
,case when ПОРЯДОК = 1 then ДАТА else null end as ДАТА С
,case when ПОРЯДОК = 2 then ДАТА else null end as ДАТА ПО
from ТАБЛИЦА
Для полученных данных взять минимум в разрезе одной предыдущей и текущей строки по обеим датам:
select
ID
,ДАТА
,ПОРЯДОК
,ДАТА С,
,ДАТА ПО
,min(ДАТА С) over (partition by ID ORDER BY ID, ДАТА ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) as МИН ДАТА С,
,min(ДАТА ПО) over (partition by ID ORDER BY ID, ДАТА ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) as МИН ДАТА ПО
from ТАБЛИЦА
Оставить только данные с ПОРЯДОК = 2;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment