繁体   English   中英

SQL 带比较的子查询

[英]SQL subquery with comparison

在带有 PostgreSQL 的 Rails (5.2) 应用程序上,我有 2 个表: ItemItemPrice ,其中一个item有很多item_prices

表格Item

ID 姓名
1个 诗集
2个 编程书

ItemPrice

ID item_id 价格
1个 1个 4个
2个 2个 20
3个 1个 8个
4个 1个 6个
5个 2个 22

我正在尝试 select 所有最后价格(附加到它的最后报价的价格)小于它之前的商品

所以在这个例子中,我的请求应该只返回项目 1 因为 6 < 8,而不是项目 2 因为 22 > 20

我尝试了 Active 记录和 SQL 子查询的各种组合,这些组合允许我将最后价格与倒数第二个价格进行比较,但到目前为止都失败了。

ex Item.all.joins(:item_prices).where('EXISTS(SELECT price FROM item_prices ORDER BY ID DESC LIMIT 1 as last_price WHERE (SELECT price FROM item_prices... ..

您可以使用ROW_NUMBERLAG执行以下操作:

LAG根据条件获取上一行

WITH ranked_items AS (
SELECT m.*, 
  ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY id DESC) AS rn,
  LAG(price,1) OVER (PARTITION BY item_id ORDER BY id ) previous_price
  FROM ItemPrice AS m
)
SELECT it.*
FROM ranked_items itp 
inner join Item it on it.id = itp.item_id
WHERE rn = 1 and price < previous_price

在这里演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM