如何修改SQL查询筛选单日至少2笔不同成交价的OrderID?
解决方案
要实现你的需求,核心是按订单+日期组合分组,检查每个分组内是否存在至少2笔交易且成交价不同,再提取对应的订单ID。
修改后的SQL查询如下:
SELECT DISTINCT OrderID FROM ORDERTABLE WHERE OrderID IN ( SELECT OrderID FROM ORDERTABLE GROUP BY OrderID, Date HAVING COUNT(*) > 1 AND COUNT(DISTINCT Price) > 1 )
逻辑说明
- 子查询部分:
- 按
OrderID和Date联合分组,聚焦到同一个订单在同一天的所有交易 COUNT(*) > 1确保当天该订单有至少2笔交易COUNT(DISTINCT Price) > 1确保当天这些交易的成交价存在差异
- 按
- 外层查询:
- 通过
IN子句筛选出符合子查询条件的订单ID,用DISTINCT避免重复输出同一个订单ID
- 通过
匹配示例场景
- OrderID 1:1.1.1111当天有2笔不同成交价的交易,子查询会命中该分组,所以会被筛选出来
- OrderID 2:1.1.1111当天的2笔交易成交价相同,不满足
COUNT(DISTINCT Price) >1,不会被命中 - OrderID 3:不同日期的成交价不同,但同一天内的交易成交价都一致,没有符合条件的分组,所以不会被筛选
和原查询的区别
原查询是对整个订单的所有交易做统计,只要订单有多个不同成交价的交易(不管是否同一天)就会被选中;而新查询严格限定了同一天内必须存在多笔不同成交价的交易,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Kamil Liskutin
相关产品推荐
相关产品推荐

