SQL如何计算各公司连续事件之间的最大间隔天数
SQL实现每个公司连续事件最大间隔天数计算
方案1:复用现有逻辑嵌套查询
你已完成的相邻间隔计算逻辑可以直接作为子查询,外层按公司分组聚合取最大值即可,不需要修改原有逻辑:
SELECT company, MAX(daysbetween) AS max_interval_days FROM ( SELECT e1.company, e1.date, (e1.date - MIN(e2.date)) AS daysbetween FROM events e1 JOIN events e2 ON (e1.company=e2.company AND e2.date > e1.date) GROUP BY e1.company,e1.date ) AS company_interval_list GROUP BY company;
该方案兼容性强,适配所有支持子查询的SQL引擎。
方案2:窗口函数优化(更高效)
如果你的数据库支持窗口函数(MySQL8.0+、PostgreSQL、Oracle等主流版本均支持),可以使用LEAD窗口函数替代自连接,大数据量下性能提升明显:
WITH sorted_events AS ( SELECT company, date, -- 按公司分组、日期升序排序,取当前行的下一条事件日期 LEAD(date) OVER(PARTITION BY company ORDER BY date) AS next_date FROM events ) SELECT company, MAX(next_date - date) AS max_interval_days FROM sorted_events -- 过滤掉每个公司最后一条无后续事件的记录 WHERE next_date IS NOT NULL GROUP BY company;
两种方案返回结果一致,最终都会输出3条对应每个公司最大间隔天数的记录。
内容的提问来源于stack exchange,提问作者ArtemisCode7
相关产品推荐
相关产品推荐

