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

如何修改PSQL查询以筛选周一为起始的最近一周数据

嘿,我来帮你搞定这个PostgreSQL的日期筛选问题!

解决方案:添加以周一为起始的最近一周的过滤条件

你原来的查询已经能精准拿到指定任务名的数据,现在只需要给WHERE子句加上日期范围条件,就能筛选出以周一为起始的最近一周内的记录了。

修改后的完整查询语句

SELECT status, username, jobname, creationdate 
FROM t_job 
WHERE jobname = 'Loadon'
  AND creationdate >= date_trunc('week', CURRENT_DATE) + INTERVAL '1 day'  -- 本周一00:00:00的时间戳
  AND creationdate <= CURRENT_TIMESTAMP;  -- 当前系统时间

关键逻辑拆解

  • 计算本周一的起始时间:
    PostgreSQL默认以周日作为一周的起始日,所以date_trunc('week', CURRENT_DATE)会返回当前周的周日零点时间。我们只需要加1天的间隔(INTERVAL '1 day'),就能得到本周一的零点时间啦。如果你的数据库已经配置为周一作为周起始,直接用date_trunc('week', CURRENT_DATE)即可,无需额外加时间间隔。
  • 如果需要筛选上一个完整周:
    要是你想查的是上周一一到上周日的完整数据(比如今天是周四,想查上周整周的记录),可以把日期条件改成这样:
    AND creationdate >= date_trunc('week', CURRENT_DATE) - INTERVAL '6 days'  -- 上周一一00:00:00
    AND creationdate < date_trunc('week', CURRENT_DATE)  -- 本周日23:59:59的下一秒,避免遗漏毫秒级数据
    
  • 时区注意事项:
    从你的样本数据能看到creationdate带有时区偏移(+11),请确保CURRENT_DATE和CURRENT_TIMESTAMP使用的时区与你的数据时区一致,避免筛选结果出现偏差。比如你使用悉尼时区,可以写成CURRENT_DATE AT TIME ZONE 'Australia/Sydney'来明确指定时区。

示例验证

假设今日是2018-03-22(周四),那么本周一的起始时间为2018-03-19 00:00:00+11,你的样本中garethy的记录(2018-03-16)会被排除,只有creationdate在2018-03-19 00:00:00+11到当前时间之间的Loadon任务数据会被返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:11