MySQL - 使用 Max、Datediff、子查询进行硬查询,Distinct/Limit

MySQL - Hard Query with Max, Datediff, Subquery, Distinct/Limit

简而言之:MySQL - 我需要带上一段时间不活跃的公司(对于 fiddle 示例来说是 365 天)。

如何检查?每个公司至少有一个联系人,他与一个事件有关,每个事件都有(许多)子事件,在最后一个table中,我有activity的最后日期,考虑那个的日子company is on inactivity 是为用户决定的,我做这个计算没有问题

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

(在Fiddlelink,应该只带companyname2和companyname4)

您可以使用聚合来获取每个公司的最后一个子事件日期。然后使用 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;

Here 是 db-fiddle.