我有一个涉及客户选择退出促销的数据集。他们将始终拥有唯一的 customer_id,但可以共享居住空间。当同一家庭的两个客户在同一天采用不同的促销操作方法(添加、删除、NULL)时,就会出现问题。
当多个家庭成员在同一 promo_action_date 上出现不同的 promo_action 值时,就会出现问题。如果一名家庭成员选择删除,我们需要确保所有家庭成员都被视为促销的删除对象。如果是这种情况,如果有多个记录共享相同的 family_id 和 promo_action_date,但 promo_action 的值不同,如何更新 promo_action 列?如果是这种情况,则要求将 promo_action_date 更新为“DELETE”。
promo_action_household 表有 4 列,如标题所示。
之前
customer_id|household_id|promo_action|promo_action_date
101|54|删除|2024-10-03
157|54|NULL|2024-10-03
之后
customer_id|household_id|promo_action|promo_action_date
101|54|删除|2024-10-03
157|54|删除|2024-10-03
如果查询 promo_action_household 表满足此条件,我希望将记录的列更新为“DELETE”。 SQL 或 Spark-sql 是这里使用的目标工具。
从 promo_action_household 组中选择 family_id、promo_action_date、count(),按 family_id、promo_action_date 的 count()>1
--更新 promo_action_household 以设置家庭的所有成员 如果任何家庭成员已经有 promo_action='DELETE',则 promo_action='DELETE'。
UPDATE promo_action_household SET promo_action='DELETE'
WHERE household_id in
(SELECT household_id FROM promo_action_household WHERE promo_action='DELETE' )
AND promo_action!='DELETE'