pgsql根据日期范围,以两个小时为一个区间,查询统计数量,按城市划分

使用并学习的是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  ;

查询内容如下

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值