【问题标题】:how to order two date columns and get latest 20 records from one table in mariadb?如何订购两个日期列并从 mariadb 的一个表中获取最新的 20 条记录?
【发布时间】:2018-03-20 17:34:40
【问题描述】:

我在 mariadb 中有一个名为 post 的表,其中包含列

|| p_creation_dateAndTime || p_modification_dateAndTime ||

这两个值都是datetime的类型

现在我想从一个创建或修改的表中按降序排列 5 条记录

这意味着现在当前时间是 10-10-2010 10:10:10 表中的条目就像

p_creation_dateAndTime || p_modification_dateAndTime
07-07-2007 07-07-07    || NULL
02-02-2002 02-02-02    || NULL
03-03-2003 03-03-03    || 07-07-2007 07-07-07    
05-05-2005 05-05-05    || NULL
02-02-2002 02-02-02    || 09-09-2009 09-09-09
08-08-2008 08-08-08    || NULL

我希望结果像

p_creation_dateAndTime || p_modification_dateAndTime
02-02-2002 02-02-02    || 09-09-2009 09-09-09
08-08-2008 08-08-08    || NULL
07-07-2007 07-07-07    || NULL
03-03-2003 03-03-03    || 07-07-2007 07-07-07   
05-05-2005 05-05-05    || NULL
02-02-2002 02-02-02    || NULL 

喜欢09 > 08 > 07 > 07 > 05 > 02

有什么解决办法吗?

上面的代码在我的项目中使用,它与stackoverflow站点相同,当向用户显示问题时需要这种排序

提前致谢

【问题讨论】:

    标签: php mysql sql database mariadb


    【解决方案1】:

    在 MySQL 或 MariaDB 或 Postgres 或 Oracle 或 Teradata 或 DB2 或 BigQuery 或 RedShift(等等)中,使用 greatest()

    order by greatest(p_creation_dateAndTime,
                      coalesce(p_modification_dateAndTime, p_creation_dateAndTime)
                     ) desc,
             p_creation_dateAndTime desc -- in the event of ties
    

    coalesce() 用于处理 NULL 值。如果greatest() 的任何参数为NULL,则返回值为NULL

    如果您确实使用datetime 数据类型,您不必担心显示日期的格式; order by 是基于内部格式的。

    【讨论】:

    • @adpro 。 . . MariaDB 是基于 MySQL 代码库构建的,所以这一点也不奇怪(尽管 MariaDB 确实有一些增强功能)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2019-09-13
    • 2017-04-30
    相关资源
    最近更新 更多