我有以下数据。
Date Interval 2014-01-01 12:00 AM 2014-01-01 12:30 AM 2014-01-01 1:00 AM 2014-01-01 1:30 AM 2014-01-01 2:00 AM 2014-01-01 2:30 AM 2014-01-01 3:00 AM 2014-01-01 3:30 AM 2014-01-01 4:00 AM 2014-01-01 4:30 AM
我需要提取间隔列的小时。
我可以使用EXTRACT('hour', Interval)
来完成,它会将小时数作为int
。
结果如下:
Date Interval HourCount 2014-01-01 12:00 AM 0 2014-01-01 12:30 AM 0 2014-01-01 1:00 AM 1 2014-01-01 1:30 AM 1 2014-01-01 2:00 AM 2 2014-01-01 2:30 AM 2 2014-01-01 3:00 AM 3 2014-01-01 3:30 AM 3 2014-01-01 4:00 AM 4 2014-01-01 4:30 AM 4
但我正在寻找的是。我需要每30分钟计数一次。
我正在寻找的数据示例。
Date Interval HourCount 2014-01-01 12:00 AM 1 2014-01-01 12:30 AM 2 2014-01-01 1:00 AM 3 2014-01-01 1:30 AM 4 2014-01-01 2:00 AM 5 2014-01-01 2:30 AM 6 2014-01-01 3:00 AM 7 2014-01-01 3:30 AM 8 2014-01-01 4:00 AM 9 2014-01-01 4:30 AM 10
这样,在一天之内,我会得到48个间隔。
我可以使用ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Date)
。但如果错过任何间隔,这将给我错误的计数。
假设错过了以下行。
2014-01-01 4:00 AM 9
我将获得9
作为此行的HourCount。
2014-01-01 4:30 AM 9
有人帮助我按照30分钟的间隔计算小时数。
答案 0 :(得分:0)
尝试类似:
with series as
(select interval_num, interval_num * interval '30 minutes' as interval_time
from generate_series(0,47) series(interval_num))
select *
from data_table
right join series on series.interval_time = data_table.interval
答案 1 :(得分:0)
就像你写的那样,你可以提取小时,你缺少的是你也可以提取分钟,然后检查它们是否大于或等于30。
SELECT date_part('hour', interval) * 2 + CASE WHEN date_part('minute', interval) >= 30 THEN 1 ELSE 0 END