如何在两个日期中的最长日期前获得结果?

aoyhnmkz  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(368)

我有两张table:一张。问题表包括:问题id,日期,更多数据2。连接表:连接id、问题id、连接日期、更多数据
我有以下联接表question\u id,question\u date,connection\u id,connection\u date在question\u id上保持联接。因此我有一些连接日期为的行和一些空的行(当没有匹配的连接时)
以下是数据示例:

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

我需要将结果表按连接日期和问题日期这两个值中的较大值排序,这样结果将是:

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来实现这一点?

6qqygrtg

6qqygrtg1#

排序方式 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;

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

相关问题