Повторите строки между значениями даты в Redshift - PullRequest
1 голос
/ 09 апреля 2019

У меня есть таблица:

id | start_date | end_date
----------------------------
01 | 2016-02-19 | 2017-03-02
02 | 2017-06-19 | 2018-09-11
03 | 2015-03-19 | 2018-05-02
04 | 2018-02-19 | 2018-01-05
05 | 2014-06-19 | 2018-07-25

и я хотел бы повторить строки, основываясь на времени между start_date и end_date, в данном случае по годам, извлеченным из этих двух столбцов даты. Мой желаемый результат будет выглядеть так:

id | year
=========
01 | 2016
01 | 2017
02 | 2017
02 | 2018
03 | 2015
03 | 2016
03 | 2017
03 | 2018
04 | 2018
05 | 2014
05 | 2015
05 | 2016
05 | 2017
05 | 2018

Как мне добиться этого в Redshift?

1 Ответ

1 голос
/ 09 апреля 2019

Мы можем попробовать объединить таблицу календаря, содержащую все годы, которые будут отображаться в вашей таблице:

WITH years AS (
    SELECT 2014 AS year UNION ALL
    SELECT 2015 UNION ALL
    SELECT 2016 UNION ALL
    SELECT 2017 UNION ALL
    SELECT 2018
)

SELECT
    t2.id,
    t1.year
FROM years t1
INNER JOIN yourTable t2
    ON t1.year BETWEEN DATE_PART('year', t2.start_date) AND DATE_PART('year', t2.end_date)
ORDER BY
    t2.id,
    t1.year;

enter image description here

Демо

Примечание. Используйте DATE_PART(year, t2.start_date) для Redshift, где компонент datetime не заключает в одинарные кавычки.

...