Создать столбцы даты и часа из диапазона дат - PullRequest
0 голосов
/ 17 января 2019

Я хочу создать временную таблицу, в которой я указываю дату начала и окончания (по цене). Затем результаты - это те даты в одном столбце и часы каждого дня в другом столбце.

Это будет выглядеть так:

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

Ответы [ 2 ]

0 голосов
/ 17 января 2019
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
...
0 голосов
/ 17 января 2019

Используйте 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
...