Sql 选择一列上的最大运行总计小于给定值的行
例如,对于以下表格:Sql 选择一列上的最大运行总计小于给定值的行,sql,postgresql,amazon-redshift,Sql,Postgresql,Amazon Redshift,例如,对于以下表格: ID | col_a | col_b | col_c ============================= 1 |5.0 |7.0 |3 2 |3.0 |6.8 |5 我需要找到列a/b的值,其中列c上的运行总数小于给定值 到目前为止,我已经: select MAX(running_total) as max FROM (select (col_a / col_b) as val, SUM(col_c) OVER (ORDER
ID | col_a | col_b | col_c
=============================
1 |5.0 |7.0 |3
2 |3.0 |6.8 |5
我需要找到列a/b的值,其中列c上的运行总数小于给定值
到目前为止,我已经:
select MAX(running_total) as max FROM (select (col_a / col_b) as val, SUM(col_c)
OVER (ORDER BY value ROWS UNBOUNDED PRECEDING) as running_total FROM tableName)
WHERE running_total < 50;
这给了我最大的运行总数,但我还需要实现此运行总数的行的值colu_a/colu_b
我使用Amazon Redshift进行此查询,这与mysql不同,mysql不允许我在外部select语句中放置val,而不在val上添加group by子句。我无法添加group by子句,因为这会改变整个查询的语义
我已找到解决类似问题的方法-
大多数情况下,这些解决方案建议,我们使用同一个表进行联接,然后匹配列的值,但是要计算正在运行的_total列,并且要对其进行联接,我必须再次计算它?听起来相当贵 你可以这样做。窗口功能用于救援 只需添加另一层子查询,计算每行的最大运行总数。然后使用where子句获取它们匹配的行:
select t.*
from (select t.*,
max(running_total) over () as maxrt
FROM (select (col_a / col_b) as val,
SUM(col_c) OVER (ORDER BY value ROWS UNBOUNDED PRECEDING
) as running_total
FROM tableName
) t
WHERE running_total < 50
) t
where running_total = maxrt;