如何用SQL查询同一日期下含多个EventA的AggregateId
问题分析
你写的SQL存在以下错误:
- 字段名匹配错误:原表不存在
CreditId字段,对应维度字段是AggregateId,同时SQL中混用了不存在的别名t,GROUP BY字段也对应错误 - 逻辑冗余:不需要做自连接,单表分组统计即可满足需求
- 分组维度缺失:需要同时按
AggregateId和TransactionDate两个维度分组,才能统计单ID单日的EventA触发次数
正确实现SQL
SELECT DISTINCT AggregateId FROM Table1 WHERE EventName = 'EventA' GROUP BY AggregateId, TransactionDate HAVING COUNT(*) >= 2
逻辑说明:
- 先过滤所有
EventName = 'EventA'的记录,减少后续计算量 - 按
AggregateId+TransactionDate分组,统计每个ID在对应日期下的EventA记录数 - 用
HAVING筛选出记录数≥2的分组 - 最后用
DISTINCT去重,避免同一个ID在多个日期满足条件时重复返回
如果需要保留全量数据统计的写法,也可以使用如下实现:
SELECT DISTINCT AggregateId FROM Table1 GROUP BY AggregateId, TransactionDate HAVING COUNT(CASE WHEN EventName = 'EventA' THEN 1 END) >= 2
内容的提问来源于stack exchange,提问作者Mumfi
相关产品推荐
相关产品推荐

