选择最少的行,直到一列的总和大于一个值

问题描述 投票:0回答:1

我在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 |符号数量价格|侧面状态| + ---- + --------- + ------ + ------- + ----...

sql postgresql
1个回答
0
投票

我将最后一个WHERE谓词更改为使用LAG()。例如:

© www.soinside.com 2019 - 2024. All rights reserved.