【发布时间】:2020-09-14 20:37:54
【问题描述】:
我在 Postgresql 中有一个表(订单),架构和数据是这样的:
+----+---------+------+-------+------+--------+
| id | symbol | qty | price | side | status |
+----+---------+------+-------+------+--------+
| 1 | BTCUSDT | 0.02 | 6500 | SELL | NEW |
+----+---------+------+-------+------+--------+
| 2 | BTCUSDT | 1.00 | 6550 | SELL | NEW |
+----+---------+------+-------+------+--------+
| 3 | BTCUSDT | 0.03 | 6600 | SELL | NEW |
+----+---------+------+-------+------+--------+
我想选择边为 SELL 且状态为 NEW 的行,按价格升序排列,直到 sum(qty) 大于 0.5,所以结果应该为我选择 id 1 和 2
当我运行这个查询时:
SELECT * FROM (
SELECT *, SUM(qty) OVER (ORDER BY price ASC) as total_qty FROM orders
WHERE symbol = 'BTCUSDT' AND side = 'SELL' AND status = 'NEW'
) AS o WHERE o.total_qty <= 0.5
它只返回第一行 (id: 1),我需要一个查询返回 1 和 2
【问题讨论】:
标签: sql postgresql