[英]SQL subquery with comparison
在带有 PostgreSQL 的 Rails (5.2) 应用程序上,我有 2 个表: Item
和ItemPrice
,其中一个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_NUMBER
和LAG
执行以下操作:
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.