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.
简而言之: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.