所以这是使用表格在雪花中解决的发电机 https://docs.snowflake.com/en/sql-reference/functions/generator.html(有固定输入)结合ROW_NUMBER https://docs.snowflake.com/en/sql-reference/functions/row_number.html然后使用DATEADD https://docs.snowflake.com/en/sql-reference/functions/dateadd.html
我更改了 48 -> 8 以使输出不那么难看。
WITH data(ID, LocationType, TripEnd, NumPeriods) as (
select COLUMN1, COLUMN2, TO_TIMESTAMP_NTZ(COLUMN3, 'dd/mm/yyyy hh:mi'), COLUMN4 from values
(1298, 'Residential','02/01/2022 05:30',8),
(1298, 'Residential','03/01/2022 05:30',6),
(1244, 'Commercial','31/12/2021 09:00',2),
(1244, 'Residential','31/12/2021 10:30',1)
), set_of_nums as (
SELECT row_number() over (order by null)-1 as rn
FROM table(generator(ROWCOUNT => 1000))
)
select d.*
,dateadd(minute, 30 * s.rn, TripEnd) as range_time
FROM DATA as d
JOIN set_of_nums as s ON d.NumPeriods >= s.rn
ORDER BY 1,3,5
;
这使:
ID |
LOCATIONTYPE |
TRIPEND |
NUMPERIODS |
RANGE_TIME |
1244 |
Commercial |
2021-12-31 09:00:00.000 |
2 |
2021-12-31 09:00:00.000 |
1244 |
Commercial |
2021-12-31 09:00:00.000 |
2 |
2021-12-31 09:30:00.000 |
1244 |
Commercial |
2021-12-31 09:00:00.000 |
2 |
2021-12-31 10:00:00.000 |
1244 |
Residential |
2021-12-31 10:30:00.000 |
1 |
2021-12-31 10:30:00.000 |
1244 |
Residential |
2021-12-31 10:30:00.000 |
1 |
2021-12-31 11:00:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 05:30:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 06:00:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 06:30:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 07:00:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 07:30:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 08:00:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 08:30:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 09:00:00.000 |
1298 |
Residential |
2022-01-02 05:30:00.000 |
8 |
2022-01-02 09:30:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 05:30:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 06:00:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 06:30:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 07:00:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 07:30:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 08:00:00.000 |
1298 |
Residential |
2022-01-03 05:30:00.000 |
6 |
2022-01-03 08:30:00.000 |