从日期范围创建日期和小时列
Create date and hour columns from date range
我想创建一个临时文件 table 并为其指定开始日期和结束日期(定价)。然后结果是一列中的那些日期和另一列中每一天的小时。
看起来像这样:
date hour
------------------
1/17/19 1
1/17/19 2
1/17/19 3
. .
. .
1/17/19 24
1/18/19 1
1/18/19 2
1/18/19 3
. .
. .
. .
看来我想用 generate_series 一小时。但不确定如何将其与日期匹配。
这不是为我完成的:
WITH hrs AS (SELECT * FROM generate_series(1,24)),
pricedate AS (SELECT * FROM generate_series('2018-01-24', '2018-01-26', interval '1 day'))
SELECT pricedate, hrs
WHERE pricedate BETWEEN '2018-01-24' AND '2018-01-26'
ORDER BY pricedate, hour
使用 cross join
:
WITH hrs AS (
SELECT gs.hr
FROM generate_series(1,24) gs(hr)
),
pricedate AS (
SELECT gs.priceate
FROM generate_series('2018-01-24', '2018-01-26', interval '1 day') gs(pricedate)
)
SELECT pricedate.pricedate, hrs.hr
FROM hrs CROSS JOIN pricedate
WHERE pricedate.pricedate BETWEEN '2018-01-24' AND '2018-01-26'
ORDER BY pricedate.pricedate, hrs.hour
select d::date as date, extract(hour from d)::int+ 1 as hour
from generate_series('2018-01-24', '2018-01-26 23:00', interval '1 hour') s(d)
date | hour
------------+------
2018-01-24 | 1
2018-01-24 | 2
2018-01-24 | 3
2018-01-24 | 4
...
我想创建一个临时文件 table 并为其指定开始日期和结束日期(定价)。然后结果是一列中的那些日期和另一列中每一天的小时。
看起来像这样:
date hour
------------------
1/17/19 1
1/17/19 2
1/17/19 3
. .
. .
1/17/19 24
1/18/19 1
1/18/19 2
1/18/19 3
. .
. .
. .
看来我想用 generate_series 一小时。但不确定如何将其与日期匹配。
这不是为我完成的:
WITH hrs AS (SELECT * FROM generate_series(1,24)),
pricedate AS (SELECT * FROM generate_series('2018-01-24', '2018-01-26', interval '1 day'))
SELECT pricedate, hrs
WHERE pricedate BETWEEN '2018-01-24' AND '2018-01-26'
ORDER BY pricedate, hour
使用 cross join
:
WITH hrs AS (
SELECT gs.hr
FROM generate_series(1,24) gs(hr)
),
pricedate AS (
SELECT gs.priceate
FROM generate_series('2018-01-24', '2018-01-26', interval '1 day') gs(pricedate)
)
SELECT pricedate.pricedate, hrs.hr
FROM hrs CROSS JOIN pricedate
WHERE pricedate.pricedate BETWEEN '2018-01-24' AND '2018-01-26'
ORDER BY pricedate.pricedate, hrs.hour
select d::date as date, extract(hour from d)::int+ 1 as hour
from generate_series('2018-01-24', '2018-01-26 23:00', interval '1 hour') s(d)
date | hour
------------+------
2018-01-24 | 1
2018-01-24 | 2
2018-01-24 | 3
2018-01-24 | 4
...