如何修改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
相关产品推荐
相关产品推荐

