首页 > 解决方案 > MySQL - 使用 Max、Datediff、子查询、Distinct/Limit 进行硬查询

问题描述

简而言之:MySQL - 我需要带上一段时间不活跃的公司(或者小提琴示例为 365 天)。

我如何检查这个?每家公司至少有一个与事件相关的联系人,并且每个事件都有(许多)子事件,在最后一张表中,我有活动的最后日期,认为一家公司处于不活动状态的天数被确定为用户,我做这个计算没有问题

sql.Append("where DATEDIFF(CURDATE(),DATE(lastdate)) > " +days.ToString()+ "

问题是,这会检查所有子事件,所以这不仅检查最后日期,而且检查每个日期......这意味着输出错误。

我正在考虑获取子查询或联系人子事件的最大日期,或事件子事件的最大日期。

然后和一个朋友我们就这样接近了,但查询是无限的。

select * from subevent se
where DATEDIFF(CURDATE(),DATE(
(select se2.dates from subevent se2 
where  se2.dates in 
(select max(se3.dates) 
from subevent se3 
where se.idev = se3.idev) 
group by se2.dates)));

我被卡住了,我会很感激你的帮助......

尝试过 group by、subquery 和 MAX (显然 max 是必要的,但不知道如何应用......)

https://www.db-fiddle.com/f/wgSQGn7Z26tHnwm6nAaNSA/8

(在 Fiddle 链接上,应该只带 companyname2 和 companyname4)

标签: mysqlsqlsubquerymax

解决方案


您可以使用聚合来获取每个公司的最后一个子事件日期。然后使用having子句过滤:

select c.idcomp
from contact c join
     events e
     on e.idcont = c.idcont join
     subevent se
     on se.idev = e.idev
group by c.idcomp
having max(se.date) < current_date - interval 365 day;

是一个 db-fiddle。


推荐阅读