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

如何编写SQL查询选取上周日晚8点及之后时间的所有数据行

问题背景

需要筛选表中日期字段值大于等于上周日晚8点的所有数据行,筛选规则要求:

  • 若当前时间是周日晚7点,筛选结果包含近一整周的数据
  • 若当前时间是周日晚9点,筛选结果仅包含周日晚8点之后约1小时的数据

原有查询语句不符合要求,因为它仅取当前时间往前推7天的同一时刻作为筛选起点,没有对齐周日晚8点的起止节点:

SELECT * FROM table WHERE date >= DATE_SUB(NOW(), INTERVAL 1 WEEK)
实现逻辑

核心是先算出距离当前时间最近的、已经过去的周日20:00作为统一筛选起点,计算规则适配MySQL日期函数特性:

  • MySQL中DAYOFWEEK()函数返回值为1代表周日、2代表周一、...、7代表周六
  • 如果当天是周日且当前时间早于20点,说明本周日的20点还没到,筛选起点要取7天前的周日20点
  • 其余情况,筛选起点取最近一个周日的20点即可
正确查询语句
SELECT * FROM your_table 
WHERE `date` >= (
  SELECT CASE
    WHEN DAYOFWEEK(NOW()) = 1 AND HOUR(NOW()) < 20 
      THEN DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 7 DAY), INTERVAL 20 HOUR)
    ELSE 
      DATE_ADD(
        DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(NOW()) - 1) DAY),
        INTERVAL 20 HOUR
      )
  END
)
场景校验
  • 当当前时间为周日19:00:命中第一分支,筛选起点为7天前的周日20:00,返回近一整周数据,符合预期
  • 当当前时间为周日21:00:命中第二分支,筛选起点为当日20:00,仅返回当天20点之后的1小时左右数据,符合预期
  • 当当前时间为周中任意一天(比如周三14:00):命中第二分支,筛选起点为刚过去的周日20:00,返回周日20点之后的所有数据,符合周度滚动对齐规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:18:08