You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何获取上周一至上周日日期以实现时间范围统计查询

PostgreSQL 上周时间边界计算方法

PostgreSQL 内置的 date_trunc 时间截断函数可以快速实现时间对齐,传入'week'参数默认按ISO周规则(周一为一周第一天)将时间对齐到当周周一的0点,基于这个特性可以快速计算上周的时间边界:

核心时间计算表达式

  • 上周一(00:00:00 整,上周起始):
    date_trunc('week', CURRENT_DATE - INTERVAL '1 week')
  • 上周日(23:59:59.999999 整,上周结束,匹配 timestamp 最大精度):
    date_trunc('week', CURRENT_DATE) - INTERVAL '1 microsecond'

优化建议

使用 BETWEEN 匹配时间范围存在精度风险,如果 recharged 字段存储了毫秒/微秒级的时间,很容易漏掉上周日最后不足1秒的记录,更推荐调整查询条件为半开区间写法,结束边界直接取本周一0点即可,无需计算上周日的最后一刻:

SELECT AVG(voltage) 
FROM TABLE1
JOIN TABLE2 ON TABLE1.id = TABLE2.table1_id
WHERE 
  recharged >= date_trunc('week', CURRENT_DATE - INTERVAL '1 week')
  AND recharged < date_trunc('week', CURRENT_DATE)
GROUP BY TABLE1.name

如果你的业务规则中一周的第一天是周日,只需要对时间偏移做对应调整即可,示例如下:

  • 上周日(作为上周起始):date_trunc('week', CURRENT_DATE - INTERVAL '1 week') - INTERVAL '1 day'
  • 本周日(作为上周结束的边界值,用于半开区间):date_trunc('week', CURRENT_DATE) - INTERVAL '1 day'

内容的提问来源于stack exchange,提问作者leauradmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:54:05