我在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 |
+----+---------+------+-------+------+--------+
我要选择side为卖出且状态为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
我在Postgresql中有一个表(订单),架构和数据如下:+ ---- + --------- + ------ + ------- + ------ + -------- + | id |符号数量价格|侧面状态| + ---- + --------- + ------ + ------- + ----...
我将最后一个WHERE
谓词更改为使用LAG()
。例如: