获取SQL表中两行的最小日期

dsm*_*309 3 mysql sql

我在SQL中有一个如下所示的表

在此输入图像描述

我想在PR创建日期或AC创建日期字段中选择具有最早日期的行.所以在这种情况下,我想要这两个记录.

在此输入图像描述

我知道我可以写

Select email, min(PR_create_date) from table 
group by email
Run Code Online (Sandbox Code Playgroud)

但是,这只会在PR_create_date列中找到最小日期.如何在PR_create_date或AC_create_date列中找到最小日期?

diz*_*iaq 5

您可以使用

SELECT email,
       MIN(least(pr_create_date, ac_create_date))
  FROM my_table
 GROUP BY email
Run Code Online (Sandbox Code Playgroud)

函数least返回其参数的最小值.

但如果其中一个论点是NULL结果也是NULL如此.因此,您要编写一些逻辑来处理空值,具体取决于业务逻辑中必须如何处理空值:例如,您可以在远期或将来使用"特殊日期"将空值替换为

SELECT email,
       MIN( least( ifnull(pr_create_date, DATE '2999-12-31'),
                   ifnull(ac_create_date, DATE '2999-12-31')) )
  FROM my_table
 GROUP BY email
Run Code Online (Sandbox Code Playgroud)

但是在最简单的情况下,当日期被排除时(即在每一行中,其中一个日期是空的),它足以写入

SELECT email,
       MIN( ifnull(pr_create_date, ac_create_date) )
  FROM my_table
 GROUP BY email
Run Code Online (Sandbox Code Playgroud)