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
相关产品推荐
相关产品推荐

