Snowflake SQL三表关联双条件过滤:补充新账号活跃性筛选
完善Snowflake SQL实现双条件账号筛选
业务表结构
1. account_table(别名acc)
| old_accountID | new_accountID |
|---|---|
| 123 | 345 |
| 678 | 910 |
2. userid_table(别名u)
| account_name | account_id |
|---|---|
| Musk1 | 123 |
| Musk2 | 345 |
| Zuckerberg1 | 678 |
| Zuckerberg2 | 910 |
3. activity_table(别名activ)
| account_name | active_l30 | last_activity_year |
|---|---|---|
| Musk1 | FALSE | 2009 |
| Musk2 | TRUE | 2022 |
| Zuckerberg1 | FALSE | 2021 |
| Zuckerberg2 | TRUE | 2022 |
需求说明
需要从account_table中筛选出满足以下两个条件的账号对:
- 旧账号(
old_accountID对应的账号)过去两年有活动(last_activity_year > 2020) - 新账号(
new_accountID对应的账号)近30天活跃(active_l30 = TRUE)
目标输出:
| old_accountID | new_accountID |
|---|---|
| 678 | 910 |
现有问题
你当前的SQL仅实现了第一个条件的筛选,未关联验证新账号的活跃状态。
完善后的SQL
SELECT acc.old_accountID, acc.new_accountID FROM account_table AS acc -- 关联旧账号的用户信息和活动记录,验证活动年份条件 JOIN userid_table AS u_old ON acc.old_accountID = u_old.account_id JOIN activity_table AS activ_old ON u_old.account_name = activ_old.account_name -- 关联新账号的用户信息和活动记录,验证近30天活跃条件 JOIN userid_table AS u_new ON acc.new_accountID = u_new.account_id JOIN activity_table AS activ_new ON u_new.account_name = activ_new.account_name WHERE activ_old.last_activity_year > 2020 AND activ_new.active_l30 = TRUE;
实现逻辑
- 以
account_table为核心表,分别关联旧、新账号对应的userid_table,获取账号名称 - 再分别关联
activity_table,分别验证旧账号的活动年份和新账号的近30天活跃状态 - 通过WHERE子句同时过滤两个条件,得到符合要求的账号对
内容的提问来源于stack exchange,提问作者Pandafreak
相关产品推荐
相关产品推荐

