如何查询同一月份内同时包含eventA和eventB的所有GUID
同月份双事件匹配GUID查询方案
实现思路
- 先对日期做年月维度对齐,确保所有同月份的记录被归为一组
- 过滤仅保留eventA、eventB两类事件的记录,降低计算量
- 按GUID+年月分组后,判断分组内是否同时存在两类事件
- 对符合条件的GUID去重输出,避免同一个GUID符合多个月份条件时重复返回
查询语句
通用版本(适配PostgreSQL、BigQuery、Spark SQL等)
将代码中的your_table_name替换为实际表名即可使用:
SELECT DISTINCT GUID FROM ( SELECT GUID, DATE_TRUNC('month', Date) AS event_month FROM your_table_name WHERE EventName IN ('eventA', 'eventB') GROUP BY GUID, event_month HAVING COUNT(DISTINCT EventName) = 2 ) AS valid_guid_groups;
MySQL适配版本
MySQL不支持DATE_TRUNC函数,替换为日期格式化函数即可:
SELECT DISTINCT GUID FROM ( SELECT GUID, DATE_FORMAT(Date, '%Y-%m') AS event_month FROM your_table_name WHERE EventName IN ('eventA', 'eventB') GROUP BY GUID, event_month HAVING COUNT(DISTINCT EventName) = 2 ) AS valid_guid_groups;
效果验证
匹配你提供的样例数据时,查询会返回abc-guid-1、def-guid-2两个结果,和预期完全一致。
内容的提问来源于stack exchange,提问作者Mumfi
相关产品推荐
相关产品推荐

