mysql-hard查询,max,datediff,subquery,distinct/limit

uklbhaso  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(305)

简言之:mysql-我需要带上一段时间不活跃的公司(对于fiddle示例是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)));

我被困住了,我很感激你的帮助。。。
尝试了groupby、subquery和max(显然max是必需的,但不知道如何应用于何处…)
https://www.db-fiddle.com/f/wgsqgn7z26thnwm6naansa/8
(在fiddle链接上,应该只带companyname2和companyname4)

k3fezbri

k3fezbri1#

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

这是一把小提琴。

相关问题