gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:29:29 27 4
gpt4 key购买 nike

基于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com