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

时间:2016-01-19 06:20:43

标签: mysql sql

我在SQL

中有一个如下所示的表

enter image description here

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

enter image description here

我知道我可以写

rows = 6;
matrixB.size = 5;
MPI_Recv(matrixB.matrixPointer[offset], rows*(matrixB.size+1)+10, MPI_DOUBLE, 0, dataMessage, MPI_COMM_WORLD, &status);

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

5 个答案:

答案 0 :(得分:5)

您可以使用

SELECT email,
       MIN(least(pr_create_date, ac_create_date))
  FROM my_table
 GROUP BY email

函数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

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

SELECT email,
       MIN( ifnull(pr_create_date, ac_create_date) )
  FROM my_table
 GROUP BY email

答案 1 :(得分:2)

还有一个解决方案:

 select temp.EMAIL, min(temp.PR_AC_CREATE_DATE)
 from
 (
  select EMAIL , min(PR_CREATE_DATE) as PR_AC_CREATE_DATE
  from table
  group by email

  union

  select EMAIL, min(AC_CREATE_DATE)
  from table
  group by email
  ) temp

 group by temp.EMAIL ;

答案 2 :(得分:0)

使用COALESCE函数,解决方案是针对通用sql可能在mysql上运行

select email,min(COALESCE(PR_create_date,AC_create_date)) as mindt 
from tab
group by email

答案 3 :(得分:0)

您可以尝试更强大的解决方案,例如:

SELECT * FROM (SELECT * FROM my_table ORDER BY pr_create_date DESC,ac_create_date DESC LIMIT 5);

排序依据:指定列和排序规则(升序ASC(默认)/降序DESC)

限制:您想要的记录数。这将给出前5个最新记录。 试试吧。

答案 4 :(得分:-1)

Select email,
       Case When PR_create_date < AC_create_date Then PR_create_date
            When AC_create_date < PR_create_date Then AC_create_date             
            End As TheMin
From   YourTableNameHere
Group By email