展开日期列雪花
Expand Date Column snowflake
我有两个这样的日期列:
date_col_1 date_col_2
2020-02-01 2023-01-01
2020-03-01 2023-02-01
2020-04-01 .
. .
. .
. .
2022-12-01 2023-12-01
我想要的是每当 date_col_2 > max(date_col_1) 时,所有大于 max(date_col_1) 的值都应该在 [=19= 的最后一个值之下] 像这样,
date_col_1
2020-02-01
2020-03-01
2020-04-01
.
.
.
2022-12-01
Append here
2023-01-01
2023-02-01
2023-03-01
.
.
.
我试过各种方法,都没有得到想要的结果。 TIA
WITH fake_data AS (
SELECT
TO_DATE(date_col_1,'yyyy-mm-dd') as date_col_1
,TO_DATE(date_col_2,'yyyy-mm-dd') as date_col_2
FROM VALUES
('2020-02-01','2023-01-01'),
('2020-03-01','2023-02-01'),
('2022-12-01','2023-12-01')
v(date_col_1, date_col_2)
), massive_date_set as (
SELECT
dateadd('day', row_number()over(order by null), TO_DATE('2000-01-01','yyyy-mm-dd')) AS date
FROM TABLE(GENERATOR(ROWCOUNT => 356 * 30))
), min_max AS (
SELECT
min(date_col_1) AS date_from
,greatest(max(date_col_1), max(date_col_2)) AS date_to
FROM fake_data
)
SELECT d.date
FROM min_max AS mm
JOIN massive_date_set d
ON d.date BETWEEN mm.date_from AND mm.date_to
ORDER BY 1;
给出:
DATE
2020-02-01
2020-02-02
2020-02-03
2020-02-04
2020-02-05
massive cut
2023-11-28
2023-11-29
2023-11-30
2023-12-01
我有两个这样的日期列:
date_col_1 date_col_2
2020-02-01 2023-01-01
2020-03-01 2023-02-01
2020-04-01 .
. .
. .
. .
2022-12-01 2023-12-01
我想要的是每当 date_col_2 > max(date_col_1) 时,所有大于 max(date_col_1) 的值都应该在 [=19= 的最后一个值之下] 像这样,
date_col_1
2020-02-01
2020-03-01
2020-04-01
.
.
.
2022-12-01
Append here
2023-01-01
2023-02-01
2023-03-01
.
.
.
我试过各种方法,都没有得到想要的结果。 TIA
WITH fake_data AS (
SELECT
TO_DATE(date_col_1,'yyyy-mm-dd') as date_col_1
,TO_DATE(date_col_2,'yyyy-mm-dd') as date_col_2
FROM VALUES
('2020-02-01','2023-01-01'),
('2020-03-01','2023-02-01'),
('2022-12-01','2023-12-01')
v(date_col_1, date_col_2)
), massive_date_set as (
SELECT
dateadd('day', row_number()over(order by null), TO_DATE('2000-01-01','yyyy-mm-dd')) AS date
FROM TABLE(GENERATOR(ROWCOUNT => 356 * 30))
), min_max AS (
SELECT
min(date_col_1) AS date_from
,greatest(max(date_col_1), max(date_col_2)) AS date_to
FROM fake_data
)
SELECT d.date
FROM min_max AS mm
JOIN massive_date_set d
ON d.date BETWEEN mm.date_from AND mm.date_to
ORDER BY 1;
给出:
DATE |
---|
2020-02-01 |
2020-02-02 |
2020-02-03 |
2020-02-04 |
2020-02-05 |
massive cut |
2023-11-28 |
2023-11-29 |
2023-11-30 |
2023-12-01 |