在红移中的日期值之间重复行 [英] Repeat Rows Between Date Values in Redshift

查看:32
本文介绍了在红移中的日期值之间重复行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张表:

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_dateend_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中实现此功能?

推荐答案

我们可以尝试连接包含您的表中将出现的所有年份的日历表:

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;

Demo

注意:使用DATE_PART(year, t2.start_date)表示RedShift,其中DateTime组件不带单引号。

这篇关于在红移中的日期值之间重复行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆