SQL多列多筛选条件查询:如何筛选符合订单时段状态要求的User_ID
符合需求的SQL查询实现
需求梳理
- 数据表包含3个字段:
User_ID(用户ID)、order_status(订单状态,取值为success/failure)、Date(订单日期) - 需要筛选同时满足以下3个条件的
User_ID:- 2021年1月-3月有下单记录(无论订单成功失败均有效)
- 2021年7月-9月有下单记录(无论订单成功失败均有效)
- 2021年4月-6月没有成功订单记录(该时间段的失败订单不影响筛选结果)
参考SQL代码
以下代码假设表名为order_records,如果实际表名不同可直接替换:
SELECT User_ID FROM order_records WHERE Date BETWEEN '2021-01-01' AND '2021-09-30' GROUP BY User_ID HAVING -- 校验2021年1-3月有下单 SUM(CASE WHEN Date BETWEEN '2021-01-01' AND '2021-03-31' THEN 1 ELSE 0 END) > 0 -- 校验2021年7-9月有下单 AND SUM(CASE WHEN Date BETWEEN '2021-07-01' AND '2021-09-30' THEN 1 ELSE 0 END) > 0 -- 校验2021年4-6月无成功订单 AND SUM(CASE WHEN Date BETWEEN '2021-04-01' AND '2021-06-30' AND order_status = 'success' THEN 1 ELSE 0 END) = 0;
逻辑说明
- 先过滤2021年1-9月的所有订单,缩小计算范围提升查询效率
- 按
User_ID分组后用聚合函数判断每个用户的三个条件是否满足,避免多次子查询关联带来的性能损耗
注意:如果你的数据库日期存储格式不是
YYYY-MM-DD,需要对应调整日期过滤的写法,确保日期判断逻辑正确。
内容的提问来源于stack exchange,提问作者raghav bansal
相关产品推荐
相关产品推荐

