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

