mysql - 对具有空值的 3 个日期中最早的日期进行排序

标签 mysql

基于 this问题我开发了一段代码,如下所示:

order by 
case 
    when bez_datum IS NULL
    then
        case
        when verg_datum IS NULL
        then event_datum
        when event_datum IS NULL
        then verg_datum
        when verg_datum < event_datum
        then verg_datum
        else event_datum
        end
    when verg_datum IS NULL
    then 
        case
        when event_datum IS NULL
        then bez_datum
        else if(bez_datum < event_datum, bez_datum, event_datum)
        end
    when event_datum IS NULL
    then if(bez_datum < verg_datum, bez_datum, verg_datum)
    else if(bez_datum < verg_datum, if(bez_datum < event_datum, bez_datum, event_datum), if(verg_datum < event_datum, verg_datum, event_datum))
end

问题是我的排序仍然没有按计划进行。当我执行这段代码时,我得到了这个结果: order by executed

当我有一个看起来像这样的表时要清楚:

id    date1        date2
1     05-09-2018   01-09-2018
2     03-09-2018   06-09-2018
3     02-09-2018   07-09-2018 
4     05-09-2018   null 

我希望它像这样出来:

id    date1        date2        sorted on
1     05-09-2018   01-09-2018   01-09-2018
3     02-09-2018   07-09-2018   02-09-2018
2     03-09-2018   06-09-2018   03-09-2018
4     05-09-2018   null         05-09-2018

所以表应该在 2 个日期中最早的日期排序,而不是计算 null。(排序依据不是应该显示的列,它只是为了显示用于排序的内容)

目前我的印象是它只对 event_datum 进行排序。

最佳答案

我想你可以使用 least ,它支持多个值。不幸的是,如果其中一个值为 nullleast 总是返回 null。您可以使用 coalesce 来解决这个问题。

您的 order by 子句可能如下所示:

order by
  least(
    --       each date goes here...
    --           |
    --          \|/ 
    coalesce(bez_datum, verg_datum, event_datum),
    coalesce(verg_datum, bez_datum, event_datum),
    coalesce(event_datum, bez_datum, verg_datum)
  )

这里的重要部分是每个日期都是合并中的第一个。其他两个只是以任何顺序传递以合并,以确保每个合并返回一个相关的非空值(如果所有三个日期都为空,则返回 null)。

关于mysql - 对具有空值的 3 个日期中最早的日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169005/

相关文章:

mysql - 子查询和用户变量

mysql - 使用列值作为表名连接表

mysql - Laravel 5.6 中的 Controller 继承

mysql - 如何处理没有行的 IN 子句返回的子查询

php - 如何将重试的数据库数据传递到另一个页面?

php - 动态下拉菜单

php - 从下拉菜单中插入数据到数据库,其数据是从另一个数据库导入的

MYSQL,从 'reported users'表中取值并使用名称从另一个表中删除

php - 如何在json数组codeigniter中创建json数组

mysql - SQL查询问题转MySQL