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

MySQL查询实现:输入日期存在返回对应记录,不存在返回前序可用日期记录

MySQL 日期匹配查询实现方案

需求说明

需要实现如下查询规则:

  • 若用户输入的日期在表中存在,直接返回该日期对应的所有记录
  • 若用户输入的日期不存在于表中,返回该日期之前最近的可用日期对应的所有记录

示例场景:

  • 当输入日期2021-08-08且表中存在该日期记录时,直接返回当日所有数据
  • 当输入日期2021-08-07且表中不存在该日期时,返回最近的前序可用日期2021-08-05对应的所有记录

实现代码

此处假设业务表名为dummy_table,存储日期的字段名为record_date,用户输入的日期用变量@input_date存储:

方案1:子查询实现(逻辑简单易读)

-- 定义用户输入的日期
SET @input_date = '2021-08-07';

-- 执行查询
SELECT * 
FROM dummy_table
WHERE record_date = (
    -- 取小于等于输入日期的最大存在日期
    SELECT MAX(record_date) 
    FROM dummy_table 
    WHERE record_date <= @input_date
);

方案2:关联查询实现(大数据量下性能更优)

SET @input_date = '2021-08-07';

SELECT t.*
FROM dummy_table t
INNER JOIN (
    SELECT MAX(record_date) AS target_date
    FROM dummy_table
    WHERE record_date <= @input_date
) td ON t.record_date = td.target_date;

优化建议

建议给record_date字段添加索引,可大幅提升查询效率,尤其适用于百万级以上数据量的表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:57:03