如何提取同一eeid同一日期下无其他payid的time=0的payid数据
解决方案:提取符合条件的payid记录
需求明确:筛选出同一eeid在同一日期下仅存在一条payid记录,且该记录time=0的数据。以下是两种可行的SQL实现方案:
方法一:子查询+GROUP BY统计
先通过分组统计筛选出仅含单个payid的eeid+date组合,再关联原表过滤time=0的记录:
SELECT t.* FROM your_table t INNER JOIN ( SELECT date, eeid FROM your_table GROUP BY date, eeid HAVING COUNT(DISTINCT payid) = 1 ) AS sub ON t.date = sub.date AND t.eeid = sub.eeid WHERE t.time = 0;
说明:用
COUNT(DISTINCT payid)是为了规避同一eeid+date下payid重复出现的场景;如果你的数据中payid不会重复,也可以简化为COUNT(payid) = 1。
方法二:窗口函数(高效推荐)
利用窗口函数直接计算每个分组内的payid数量,一步筛选目标记录:
SELECT date, eeid, payid, time FROM ( SELECT *, COUNT(DISTINCT payid) OVER (PARTITION BY date, eeid) AS payid_count FROM your_table ) AS t WHERE payid_count = 1 AND time = 0;
说明:窗口函数
PARTITION BY date, eeid会按日期和eeid分组计算payid数量,无需额外关联操作,数据量大时性能更优。
注意事项
- 请将代码中的
your_table替换为你的实际表名 - 如果payid存在NULL值,需根据业务逻辑调整统计逻辑(例如用
COUNT(*)统计分组内总记录数)
内容的提问来源于stack exchange,提问作者Mims
相关产品推荐
相关产品推荐

