使用并学习的是date_trunc(text,字段时间) :
用于将日期或时间的精度截断到指定的单位。它接受两个参数:第一个参数是要截断的单位,第二个参数是要截断的日期或时间。
而interval '1 hour' * (DATE_PART('hour', click_time)::int % 2)的意思是:
1.首先,我们有一个时间间隔,表示为INTERVAL ‘1 hour’。这是一个固定的时间间隔,表示1小时
2.接下来我们使用函数DATE_PART(‘hour’, click_time)来获取一个时间值click_time的小时部分。这个函数返回click_time的小时部分的值。注意,click_time必须是一个日期或时间类型的值。
3.使用::int将获取的小时部分的值转换为整数。
4.使用%运算符,取整数小时部分除以2的余数。这将得到0或1,即偶数小时返回0,奇数小时返回1。
5.最后,将得到的余数乘以时间间隔INTERVAL ‘1 hour’,以获得符合条件的时间间隔。
SELECT
to_char(interval_start,'HH24:00:00') AS timePoint,sum(a.count)as count,city
from
(SELECT
DATE_TRUNC('hour', click_time) - INTERVAL '1 hour' * (DATE_PART('hour', click_time)::int % 2) AS interval_start,
COUNT(*) AS count,city
FROM view_record
WHERE click_time >= '2023-07-10' AND click_time < '2023-07-12'
GROUP BY DATE_TRUNC('hour', click_time) - INTERVAL '1 hour' * (DATE_PART('hour', click_time)::int % 2),city
ORDER BY interval_start asc) as a
GROUP BY timePoint , city
ORDER BY timePoint asc ;
查询内容如下