sql - 如何过滤使用 MAX(CASE WHEN ... END) 生成的字段?
问题描述
我已经使用下面的查询从 1 月到 5 月的数据中成功检索了数据,为每个客户生成了第一次和第二次购买。
SELECT
MAX(CASE WHEN row_num = 1 THEN month END) AS month,
customer_id,
1 AS row_num,
DATE_DIFF(MAX(CASE WHEN row_num = 2 THEN verified_date END),
MAX(CASE WHEN row_num = 1 THEN verified_date END), DAY) AS difference
FROM yourTable
GROUP BY
customer_id;
现在,我想过滤月份以让所有用户在 1 月至 4 月进行第一次交易,并在任何时间(1 月至 5 月)进行第二次交易并尝试以下查询:
SELECT
MAX(CASE WHEN row_num = 1 AND month IN (1,2,3,4) THEN month END) AS month,
customer_id,
1 AS row_num,
DATE_DIFF(MAX(CASE WHEN row_num = 2 THEN verified_date END),
MAX(CASE WHEN row_num = 1 THEN verified_date END), DAY) AS difference
FROM yourTable
GROUP BY
customer_id;
查询成功运行,但是,它生成了月份 1 2 3 4,并且在月份字段中生成了 NULL。
为什么里面有NULL?
谢谢
解决方案
假设每个客户的订单交易按时间顺序排列,当行的月份与 1、2、3 或 4 不同时,即“第一笔交易在 5 月”时,row_num
将最终为空。yourTable
MAX(CASE WHEN row_num = 1 AND month IN (1,2,3,4) THEN month END) AS month,
row_num = 1
要过滤,请使用HAVING MAX(CASE WHEN row_num = 1 AND month IN (1,2,3,4) THEN month END) is not null
.
推荐阅读
- python - 访问主小部件内的小部件以进行顺序网格化
- typescript - 在 VSCode 中开发扩展时如何从 QuickFix 传递错误详细信息和行号?
- python - 我可以通过 python 使用 Apple 的 SKCloudServiceController 吗?
- python-3.x - 是否可以解决相对进口的问题?
- java - Keycloak 和第三方库中的类加载器出错
- python - 在列表python中合并字典
- sql - 是否可以使用 SQL 查询从此 XML 中获取名称属性值
- json - Watson Assistant 按钮值不起作用
- solidity - Solidity将对象传递给参数?
- firebase - 如何在 Flutter Firestore 中查询 2 个文档并作为列表返回?