gpt4 book ai didi

SQL:日期字段集中的最早日期

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

我有一系列日期与表中的唯一标识符相关联。例如:

1 | 1999-04-01 | 0000-00-00 | 0000-00-00 | 0000-00-00   | 2008-12-01 | 
2 | 1999-04-06 | 2000-04-01 | 0000-00-00 | 0000-00-00 | 2010-04-03 |
3 | 1999-01-09 | 0000-00-00 | 0000-00-00 | 0000-00-00 | 2007-09-03 |
4 | 1999-01-01 | 0000-00-00 | 1997-01-01 | 0000-00-00 | 2002-01-04 |

有没有办法使用简单的 SQL 命令从 DATE 字段的预定义列表中选择最早的日期?

所以预期的输出是:

1 | 1999-04-01
2 | 1999-04-06
3 | 1998-01-09
4 | 1997-01-01

我猜这是不可能的,但我想问问并确定一下。我目前考虑的解决方案包括将所有日期放在一个临时表中,然后使用它来获取 MIN()

谢谢

编辑:如前所述,使用 LEAST() 的问题在于,如果任何列为 NULL,则新行为将返回 NULL。在一系列日期(如所讨论的数据集)中,任何日期都可能为 NULL。我想从一组日期中获取最早的实际日期。

解决方案:结合使用 LEAST() 和 IF() 以过滤掉 NULL 日期。

 SELECT LEAST( IF(date1=0,NOW(),date1), IF(date2=0,NOW(),date2), [...] );

经验教训 a) COALESCE 不会将“0000-00-00”视为 NULL 日期,b) LEAST 将返回“0000-00-00”作为最小值 - 我猜这是由于内部整数比较(?)

最佳答案

select id, least(date_col_a, date_col_b, date_col_c) from table

更新

select id, least (
case when date_col_a = '0000-00-00' then now() + interval 100 year else date_col_a end,
case when date_col_b = '0000-00-00' then now() + interval 100 year else date_col_b end) from table

关于SQL:日期字段集中的最早日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204420/

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