группировка временных интервалов на Redshift sql - PullRequest
0 голосов
/ 23 мая 2018

Я хотел бы добиться следующего:

из временной метки. Я хотел бы указать, где часть времени попадает под какой интервал, как.08:00:00 - 12:59:59, 13:00:00 - 17:59:59, 18:00:00 - 22:59:59 и т. Д. Вся идея обернута вокруг, и я хочу определить, в какое времяв день веб-сайт в основном посещается.Я использовал cast(timestamp as time), он не работает, я сделал select '2018-05-25 12:00:00'::time, он извлекает время, но только когда он набирается в тексте, а не в имени столбца, я надеюсь использовать «предположим, что этот код работал»:

select timestamp::time between '08:00:00'::time and '12:59:59'

мое первоначальное решение было, что мой менеджер говорит, что это неправильно.

sum(case when cast(substring(split_part(event_date, ' ', 2),1,2) as int) in (23,00,01,02,03,04) then 1 else 0 end) as time_23_04,
sum(case when cast(substring(split_part(event_date, ' ', 2),1,2) as int) between 5 and 7 then 1 else 0 end) as time_05_07,
sum(case when cast(substring(split_part(event_date, ' ', 2),1,2) as int) between 8 and 12 then 1 else 0 end) as time_08_12,
sum(case when cast(substring(split_part(event_date, ' ', 2),1,2) as int) between 13 and 17 then 1 else 0 end) as time_13_17,
sum(case when cast(substring(split_part(event_date, ' ', 2),1,2) as int) between 18 and 22 then 1 else 0 end)  as time_18_22

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете извлекать даты, используя EXTRACT () :

SELECT
  SUM(CASE WHEN MOD(EXTRACT(HOUR FROM event_date), 23) BETWEEN 0 AND 4 THEN 1 END) AS time_23_04,
  SUM(CASE WHEN EXTRACT(HOUR FROM event_date) BETWEEN  5 AND  7 THEN 1 END) AS time_05_07,
  SUM(CASE WHEN EXTRACT(HOUR FROM event_date) BETWEEN  8 AND 12 THEN 1 END) AS time_08_12,
  SUM(CASE WHEN EXTRACT(HOUR FROM event_date) BETWEEN 13 AND 17 THEN 1 END) AS time_13_17,
  SUM(CASE WHEN EXTRACT(HOUR FROM event_date) BETWEEN 18 AND 22 THEN 1 END) AS time_18_22
FROM table

Первая строка - это мое удовольствие.Это то же самое, что ваш оператор IN.

Кроме того, если оператор CASE не находит соответствия, он возвращает NULL, который игнорируется SUM.

...