[英]Get min date across two rows in SQL table
您可以使用
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
还有一个解决方案
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 ;
使用COALESCE函数,解决方案是针对通用sql可能在mysql上运行
select email,min(COALESCE(PR_create_date,AC_create_date)) as mindt
from tab
group by email
您可以尝试更强大的解决方案,例如:
SELECT * FROM (SELECT * FROM my_table ORDER BY pr_create_date DESC,ac_create_date DESC LIMIT 5);
排序依据:指定列和排序规则(升序ASC(默认)/降序DESC)
限制:您想要的记录数。 这将给出前5个最新记录。 试试吧。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.