求可筛选最新成本与历史成本有差异产品的SQL查询语句
解决方案
思路
先给每个产品的订单按日期倒序编号,提取最新和上一笔订单的成本,对比两者是否存在差异,最后关联产品表筛选出目标产品。
SQL 查询语句
WITH RankedOrders AS ( SELECT order_id, cost, ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY order_date DESC) AS rn FROM "Order" ) SELECT p.id, p.product FROM Product p JOIN ( SELECT ro1.order_id FROM RankedOrders ro1 JOIN RankedOrders ro2 ON ro1.order_id = ro2.order_id AND ro1.rn = 1 AND ro2.rn = 2 WHERE ro1.cost != ro2.cost ) diff_products ON p.id = diff_products.order_id WHERE p.id IN (1, 2);
说明
- RankedOrders 公共表表达式:按产品(
order_id)分组,给每个产品的订单按order_date倒序排名,rn=1代表最新订单,rn=2代表上一笔订单。 - 差异产品筛选子查询:关联同一产品的最新和上一笔订单,找出成本不同的产品ID。
- 最终关联查询:关联产品表,仅保留ID为1、2的产品,符合预期结果要求。
内容的提问来源于stack exchange,提问作者Shiv
相关产品推荐
相关产品推荐

