Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择一列上的最大运行总计小于给定值的行_Sql_Postgresql_Amazon Redshift - Fatal编程技术网

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;