mysql - 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)
解决方案
您可以使用聚合来获取每个公司的最后一个子事件日期。然后使用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。
推荐阅读
- java - GWT SeralizationStreamFactory 阅读器问题
- matlab - 使用系统命令播放电影并继续进行听觉刺激演示
- monogame - 在 MCGP 之后在 GLSL 中缺少声明
- apache-kafka - 如何设置 Kafka Streams 消息压缩?
- apache - 网站通过了 https ssl 认证,但端口不是?
- python - 如何在不发送自我的情况下从内部类更改外部类?
- java - 使用 hazelcast 客户端-服务器拓扑连接到数据库
- excel - 使用 Excel VBA 打开 SAS Enterprise Guide 7.1 egp 文件
- java - 添加时,选中的项目始终附加在数组列表中
- sql - 计算任何项目中不包含 X 的 Opps