【问题标题】:How can I sore results by highest of two dates?我怎样才能按两个日期中的最高值计算结果?
【发布时间】:2018-11-25 10:00:36
【问题描述】:

我有两张桌子: 1.问题表,包括:question_id、日期、更多数据 2.连接表:connection_id、question_id、connection_date、更多数据

我有以下连接表 question_id、question_date、connection_id、connection_date 离开加入 question_id。 所以我有一些带有连接日期的行和一些带有 NULL 的行(当没有匹配的连接时)

以下是数据样本:

question_id | question_date | connection_id | connection_date
500         | 28-10-2018    |  7            |  22-12-2018
501         | 29-10-2018    |  NULL         |  NULL
505         | 01-11-2018    |  8            |  10-12-2018
506         | 05-11-2018    |  9            |  02-12-2018 
507         | 07-12-2018    |  NULL         |  NULL

我需要按两个值 connection_date 和 question_date 中较大的一个对结果表进行排序,因此结果将是:

question_id | question_date | connection_id | connection_date
500         | 28-10-2018    |  7            |  22-12-2018
505         | 01-11-2018    |  8            |  10-12-2018
507         | 07-12-2018    |  NULL         |  NULL
506         | 05-11-2018    |  9            |  02-12-2018 
501         | 29-10-2018    |  NULL         |  NULL

我怎样才能通过单独使用 mysql 来实现?

【问题讨论】:

  • 第 1 步:使用日期数据类型存储日期
  • 他们当然是

标签: mysql left-join sql-order-by


【解决方案1】:

使用GREATEST排序:

SELECT question_id, question_date, connection_id, connection_date
FROM yourTable
ORDER BY GREATEST(question_date, COALESCE(connection_date, question_date)) DESC;

为了解释为什么使用COALESCE,如果connection_dateNULL,我们忽略它,只使用question_date。此答案假定 question_date 永远不会是 NULL

根据@strawberry 评论,如果您将日期存储为文本,那么我们将不得不额外调用STR_TO_DATE

SELECT question_id, question_date, connection_id, connection_date
FROM yourTable
ORDER BY
    GREATEST(STR_TO_DATE(question_date, '%d-%m-%Y'),
             COALESCE(STR_TO_DATE(connection_date, '%d-%m-%Y'),
                      STR_TO_DATE(question_date, '%d-%m-%Y'))) DESC;

请避免将日期存储为文本,而是使用适当的日期列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多