2013-12-18 2 views
2

예를 들어, 테이블 등을 위해 : 대한선택 행

내가 col_a의 가치를 찾을 필요가
ID | col_a | col_b | col_c 
============================= 
1 |5.0  |7.0  |3 
2 |3.0  |6.8  |5 

/col_b col_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; 

이 총을 실행하는 나에게 최대를 제공하지만이 running_total이 달성 된 행에 대한 발 (col_a/col_b)가 필요합니다 :

지금까지 내가 가지고있다.

이 쿼리에는 Amazon Redshift가 사용됩니다. mysql과 달리 val에 group by 절을 추가하지 않고 외부 select 문에 val을 배치 할 수 있습니다. 나는 쿼리의 전체적인 의미를 바꿀 그룹 by 절을 추가 할 수 없다. 비슷한 문제에

내가 찾은 솔루션 - Fetch the row which has the Max value for a column

대부분 이러한 솔루션 우리가 같은 테이블과 조인 다음 열에 대한 값과 일치하지만, running_total 열이 계산되고 거기에 가입 할 것을 제안 다시 계산해야합니까? 꽤 비싼 소리.

답변

2

이 작업을 수행 할 수 있습니다. 창은 구조 기능을 수행합니다.

각 행의 최대 누적 합계를 계산하는 또 다른 하위 쿼리 계층을 추가하기 만하면됩니다. 그런 다음 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;