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

如何在SQL中查询从当前日期起过去1个月的数据?

如何在SQL中获取当前日期起过去1个月的数据

嘿,我来帮你搞定这个需求,先梳理下原查询里的几个小问题,再给出正确的写法:

原查询的问题点

  • 日期范围顺序错误:BETWEEN CURDATE() AND date_sub(CURDATE(), INTERVAL 30 DAY) 里,BETWEEN要求左侧日期小于等于右侧日期,但你把当前日期放在前面、30天前的日期放在后面,会直接导致没有数据匹配。
  • 逻辑运算符优先级问题:原WHERE子句里的OR和AND组合没加正确的括号,可能会让筛选逻辑偏离你预期的效果。

修正后的SQL写法

场景1:取过去30天的固定天数数据

SELECT * 
FROM user_claim_tag 
LEFT JOIN tasks ON user_claim_tag.task_id = tasks.id 
LEFT JOIN users ON user_claim_tag.user_id = users.uid 
LEFT JOIN user_details ON user_details.usr_id = users.uid 
WHERE 
  tasks.is_deleted = 'N'
  AND (user_claim_tag.complete = 'Y' OR user_claim_tag.complete = 'NS')
  AND complete_dt >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
  AND complete_dt <= CURDATE()
ORDER BY complete_dt DESC

场景2:取过去1个自然月的数据(比如今天是5月15日,取4月15日到5月15日的数据)

SELECT * 
FROM user_claim_tag 
LEFT JOIN tasks ON user_claim_tag.task_id = tasks.id 
LEFT JOIN users ON user_claim_tag.user_id = users.uid 
LEFT JOIN user_details ON user_details.usr_id = users.uid 
WHERE 
  tasks.is_deleted = 'N'
  AND (user_claim_tag.complete = 'Y' OR user_claim_tag.complete = 'NS')
  AND complete_dt >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
  AND complete_dt <= CURDATE()
ORDER BY complete_dt DESC

对应的PHP执行逻辑

// 这里以"过去1个自然月"的SQL为例
$sql = "SELECT * 
        FROM user_claim_tag 
        LEFT JOIN tasks ON user_claim_tag.task_id = tasks.id 
        LEFT JOIN users ON user_claim_tag.user_id = users.uid 
        LEFT JOIN user_details ON user_details.usr_id = users.uid 
        WHERE 
          tasks.is_deleted = 'N'
          AND (user_claim_tag.complete = 'Y' OR user_claim_tag.complete = 'NS')
          AND complete_dt >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
          AND complete_dt <= CURDATE()
        ORDER BY complete_dt DESC"; 

$ex = $this->db->query($sql); 
$data['data'] = $ex->result();

补充小提示

  • 用>=和<=比BETWEEN更直观,能有效避免日期顺序搞反的问题;
  • 如果complete_dt字段包含时分秒(比如格式是YYYY-MM-DD HH:MM:SS),可以把CURDATE()换成CURRENT_TIMESTAMP,确保能匹配到当天所有时间点的数据;
  • 调整后的WHERE子句括号,保证complete的两个状态是OR关系,再和其他筛选条件做AND关联,更贴合业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:53