ClickHouse中筛选从未有status=1的非去重记录的SQL查询
解决ClickHouse筛选从未出现status=1的所有记录问题
问题核心
你需要的是所有属于从未有过status=1的物品的完整记录,而非单纯所有status=0的记录——后者会包含那些物品既有0又有1的情况里的0记录,这是你之前SQL出错的原因。
正确查询语句
方法1:子查询过滤物品名称
先筛选出从未出现status=1的物品名称,再关联原表获取这些物品的所有记录:
SELECT t.* FROM your_table t WHERE t.name IN ( SELECT name FROM your_table GROUP BY name HAVING MAX(status) = 0 )
方法2:窗口函数(适合大数据量场景)
通过窗口函数计算每个物品的最大状态值,再筛选最大状态为0的记录:
SELECT name, status FROM ( SELECT name, status, MAX(status) OVER (PARTITION BY name) AS max_status FROM your_table ) WHERE max_status = 0
示例验证
假设原表数据:
| name | status |
|---|---|
| A | 0 |
| A | 1 |
| B | 0 |
| B | 0 |
| C | 0 |
执行上述语句后,会返回B和C的所有记录:
| name | status |
|---|---|
| B | 0 |
| B | 0 |
| C | 0 |
不会包含A的status=0记录,符合需求。
内容的提问来源于stack exchange,提问作者magee05
相关产品推荐
相关产品推荐

