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

MySQL含两个时间戳列的表按最近有效日期排序的SELECT语句怎么写?

MySQL查询解决方案

核心逻辑梳理

  • 表字段规则:date_1始终存储有效时间戳,date_2仅为NULL/0或晚于date_1的有效时间戳
  • 筛选逻辑:保留date_1大于当前时间,或date_2不为空/0且大于当前时间的行
  • 排序逻辑:取每行第一个大于当前时间的最近有效日期作为排序依据:
    1. 若date_1大于当前时间,直接取date_1作为排序值(date_2晚于date_1,date_1是更近的有效日期)
    2. 若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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:03