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

MariaDB中按双日期列排序,获取指定数量最新记录的方法

没问题,我来帮你搞定这两个MariaDB的查询问题:

问题1:对表中两个日期列排序并获取最新20条记录

要实现这个需求,核心是找到每条记录的最新日期(创建或修改时间的较大值),然后按这个值降序排列,最后取前20条。这里要注意处理日期列可能为NULL的情况——比如有些记录可能还没被修改过,修改日期就是空值。

推荐用COALESCE()函数处理空值(把NULL替换成另一个有效日期),再结合GREATEST()函数取两个日期中的最大值,最终的SQL查询如下:

SELECT *
FROM your_table
ORDER BY GREATEST(
    COALESCE(creation_date, '1970-01-01'),  -- 如果创建日期为空,用一个极早的日期兜底
    COALESCE(modification_date, '1970-01-01')  -- 如果修改日期为空,同样兜底
) DESC
LIMIT 20;

如果你的业务逻辑是:修改日期为空时,默认用创建日期作为最新时间,那可以简化成这样(更贴合实际场景):

SELECT *
FROM your_table
ORDER BY COALESCE(modification_date, creation_date) DESC
LIMIT 20;

这样写的好处是,当修改日期存在时用它,不存在就用创建日期,完美覆盖所有情况。


问题2:针对post表按创建/修改时间降序取5条记录

结合你给出的post表结构和数据,我们同样用COALESCE()来处理p_modification_dateAndTime为NULL的情况,把空值替换成对应的p_creation_dateAndTime,然后按这个合并后的日期降序排序,取前5条。

对应的SQL查询是:

SELECT *
FROM post
ORDER BY COALESCE(p_modification_dateAndTime, p_creation_dateAndTime) DESC
LIMIT 5;

针对你给出的示例数据,排序后的结果逻辑如下:

  • 第三条记录:修改时间是07-07-2007 07:07:07,是示例中最新的时间
  • 第一条记录:修改时间为空,用创建时间07-07-2007 07:07:07,和第三条并列
  • 第四条记录:创建时间05-05-2005 05:05:05(假设修改时间为空或更早)
  • 第二条记录:创建时间02-02-2002 02:02:02(修改时间为空)

所以最终返回的5条记录会按这个时间顺序排列,优先展示最新的活动记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:00