postgresql-按照小时分组统计

简单的问题描述:

1. Django后台配置的上海时间

2. postgresql采用了默认UTC时间

3. 后台跟数据库差了8个小时,页面显示没得问题

4. 当通过orm执行原生SQL的时候发现按照小时统计的结果还是晚了八个小时

 

网上找了很多教程,有让改postgresql配置文件,timezone改为PRC。改完之后数据库显示没问题。但是通过SQL分组查询还是会有问题

复制代码
SELECT
  (to_char(take_photo_time, 'yyyy-mm-dd:HH')) AS "take_photo_time",
  COUNT(take_photo_time) AS "count"
FROM
  "device_devicephotomodel"
WHERE
  "device_devicephotomodel".take_photo_time BETWEEN '2020-12-23T00:00:00' :: TIMESTAMP
  AND '2020-12-24T00:00:00' :: TIMESTAMP
GROUP BY
  (to_char(take_photo_time, 'yyyy-mm-dd:HH'))
ORDER BY
  "take_photo_time" DESC;
复制代码

统计到的结果,依然是晚了8个小时

 

 通过date_trunte可以解决。但是还得调整接口,太麻烦

复制代码
SELECT
    DATE_TRUNC( 'HOUR', take_photo_time ) AS "take_photo_time",
    COUNT ( take_photo_time ) AS "count" 
FROM
    "device_devicephotomodel" 
WHERE
    "device_devicephotomodel".take_photo_time BETWEEN '2020-12-23T00:00:00' :: TIMESTAMP 
    AND '2020-12-24T00:00:00' :: TIMESTAMP 
GROUP BY
    (
    DATE_TRUNC('HOUR', take_photo_time))
ORDER BY
    "take_photo_time" DESC;
复制代码

于是找了一些比较官方的文档,说是需要·····················。。直接贴解决方式

复制代码
SELECT
  (to_char(take_photo_time, 'yyyy-mm-dd:HH24')) AS "take_photo_time",
  COUNT(take_photo_time) AS "count"
FROM
  "device_devicephotomodel"
WHERE
  "device_devicephotomodel".take_photo_time BETWEEN '2020-12-23T00:00:00' :: TIMESTAMP
  AND '2020-12-24T00:00:00' :: TIMESTAMP
GROUP BY
  (to_char(take_photo_time, 'yyyy-mm-dd:HH24'))
ORDER BY
  "take_photo_time" DESC;
复制代码

上边飘红的地方,就是重点。两个数字解决了一天·····有点无语

 

 最后发现。正确了。满足我的需求了。。可以回家了

posted @   一石数字欠我15w!!!  阅读(2463)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示