如何用SQL实现指定条件下添加状态行或筛选符合条件的id_1和id_2?
SQL实现方案
一、找出符合条件的id_1与id_2
可以通过分组聚合筛选出同时存在opened和clicked状态、但不存在delivered状态的id组合:
SELECT id_1, id_2 FROM 你的表名 GROUP BY id_1, id_2 HAVING SUM(CASE WHEN status = 'opened' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN status = 'clicked' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN status = 'delivered' THEN 1 ELSE 0 END) = 0;
二、新增status='delivered'的行
可以结合上述查询结果,用INSERT...SELECT语句批量插入目标行(注意替换表名和其他字段的默认值):
INSERT INTO 你的表名 (id_1, id_2, status, 其他字段名1, 其他字段名2) SELECT id_1, id_2, 'delivered', 字段1默认值, 字段2默认值 FROM ( SELECT id_1, id_2 FROM 你的表名 GROUP BY id_1, id_2 HAVING SUM(CASE WHEN status = 'opened' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN status = 'clicked' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN status = 'delivered' THEN 1 ELSE 0 END) = 0 ) AS target_groups;
注:如果你的数据库支持窗口函数,也可以用窗口函数替代分组聚合来筛选目标id组合,逻辑一致。
内容的提问来源于stack exchange,提问作者Alok p
相关产品推荐
相关产品推荐

