You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:39:00