MySQL含两个时间戳列的表按最近有效日期排序的SELECT语句怎么写?
MySQL查询解决方案
核心逻辑梳理
- 表字段规则:
date_1始终存储有效时间戳,date_2仅为NULL/0或晚于date_1的有效时间戳 - 筛选逻辑:保留
date_1大于当前时间,或date_2不为空/0且大于当前时间的行 - 排序逻辑:取每行第一个大于当前时间的最近有效日期作为排序依据:
- 若
date_1大于当前时间,直接取date_1作为排序值(date_2晚于date_1,date_1是更近的有效日期) - 若
date_1小于等于当前时间,必然是date_2符合筛选条件,取date_2作为排序值
- 若
完整查询语句
SELECT * FROM 你的表名 WHERE date_1 > CURRENT_TIMESTAMP() OR (COALESCE(date_2, 0) <> 0 AND date_2 > CURRENT_TIMESTAMP()) ORDER BY IF(date_1 > CURRENT_TIMESTAMP(), date_1, date_2) ASC;
兼容写法说明
如果需要兼容更多边界场景,也可以用
LEAST函数实现相同排序效果,逻辑更直观:ORDER BY LEAST( IF(date_1 > CURRENT_TIMESTAMP(), date_1, '9999-12-31'), IF(COALESCE(date_2,0) > CURRENT_TIMESTAMP(), date_2, '9999-12-31') ) ASC
内容的提问来源于stack exchange,提问作者h-o
相关产品推荐
相关产品推荐

