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

如何统计每月首次出现的唯一Event_Combined事件数?

解决方案

核心是先定位每个事件的首次出现月份,再按月份统计该月首次出现的事件数,同时确保所有存在的月份都被展示(包括无新增事件的月份)。

方法1:CTE+窗口函数(适用于现代数据库)

支持MySQL 8.0+、PostgreSQL、SQL Server等:

WITH FirstEventMonths AS (
    -- 找出每个事件的首次出现月份
    SELECT 
        Event_Combined,
        MIN(Royalty_Month) AS First_Appearance_Month
    FROM Agency
    GROUP BY Event_Combined
),
AllExistingMonths AS (
    -- 提取所有存在的月份
    SELECT DISTINCT Royalty_Month
    FROM Agency
)
-- 关联统计每个月的新增事件数
SELECT 
    aem.Royalty_Month,
    COUNT(fem.Event_Combined) AS Total_Events
FROM AllExistingMonths aem
LEFT JOIN FirstEventMonths fem 
    ON aem.Royalty_Month = fem.First_Appearance_Month
GROUP BY aem.Royalty_Month
ORDER BY aem.Royalty_Month ASC;

方法2:子查询实现(兼容低版本数据库)

如果数据库不支持CTE,可使用子查询:

SELECT 
    am.Royalty_Month,
    COUNT(DISTINCT a.Event_Combined) AS Total_Events
FROM (SELECT DISTINCT Royalty_Month FROM Agency) am
LEFT JOIN Agency a 
    ON am.Royalty_Month = a.Royalty_Month
    -- 只保留该事件在当前月是首次出现的记录
    AND NOT EXISTS (
        SELECT 1 
        FROM Agency a2 
        WHERE a2.Event_Combined = a.Event_Combined 
        AND a2.Royalty_Month < a.Royalty_Month
    )
GROUP BY am.Royalty_Month
ORDER BY am.Royalty_Month ASC;

逻辑说明

  1. 定位首次出现月份:通过MIN(Royalty_Month)或NOT EXISTS子查询,确保每个事件只关联到它第一次出现的月份。
  2. 保留所有月份:提取表中所有存在的月份,避免无新增事件的月份被过滤,保证结果完整性。
  3. 左连接统计:通过左连接关联月份和首次事件数据,没有匹配的月份会返回NULL,COUNT时自动记为0。

内容的提问来源于stack exchange,提问作者thestewartofny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:20:41