如何筛选含非NULL blocking_session_id的distinct collection_time分组
解决思路与SQL实现
要筛选出至少包含1条非NULL blocking_session_id的去重collection_time,以下是几种直接可用的实现方式:
方法1:GROUP BY + HAVING(最简洁高效)
利用GROUP BY按时间分组,再通过HAVING筛选分组条件——COUNT(blocking_session_id)会自动忽略NULL值,只要结果大于0,就说明该分组存在非NULL记录:
SELECT collection_time FROM your_table_name GROUP BY collection_time HAVING COUNT(blocking_session_id) > 0;
方法2:EXISTS子查询(适用于复杂关联场景)
通过子查询验证当前时间分组是否存在非NULL的blocking_session_id,再用DISTINCT去重:
SELECT DISTINCT collection_time FROM your_table_name t1 WHERE EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.collection_time = t1.collection_time AND t2.blocking_session_id IS NOT NULL );
方法3:IN子查询(逻辑直观)
先提取所有存在非NULL blocking_session_id的时间,再外层取这些时间的去重值:
SELECT DISTINCT collection_time FROM your_table_name WHERE collection_time IN ( SELECT collection_time FROM your_table_name WHERE blocking_session_id IS NOT NULL );
以上三种方法都能正确返回你示例中的2条目标数据,排除全为NULL的2022-12-01 20:25:12.847分组。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

