2013-05-16 2 views
1

내가 임시 테이블, #의 T1에서 일부 행을 선택하고 계산 값을 최소 및 최대를 기반으로하기 :은 내가 만든 것을, 테이블

SELECT FutContract, 
    Quantity, 
    Date, 
    Price, 
    TotalQuantity, 
    PercentOfTotalQ, 
    CumulativePercentile= 
     (SELECT ROUND(SUM(PercentOfTotalVol),2) FROM #t1 b 
     WHERE b.OvernightVol <= a.OvernightVol AND b.FutContract = a.FutContract) 

FROM #t1 a 

내가를 나타내는 두 개의 행을 만들 싶습니다 CumulativePercentile이 0.3 (30 번째 백분위 수)보다 큰 MIN (가격) 및 MAX (가격)이지만 다른 임시 테이블을 만드는 것이 유일한 방법입니다. 나는 가능하면하지 않는 것을 선호합니다. 어떤 아이디어?

편집 : 당신은 SQL 서버 2005 이상에있는 경우

;WITH z AS 
(SELECT FutContract, OvernightVol, MorningDate, Price, TotalVol, 
    PercentOfTotalVol, CumulativePercentile= 
    (SELECT ROUND(SUM(PercentOfTotalVol),2) FROM #t1 b 
    WHERE b.OvernightVol <= a.OvernightVol AND b.FutContract = a.FutContract) FROM #t1 a) 

    SELECT *, 
     (SELECT MIN(Price) OVER(PARTITION BY FutContract) FROM z WHERE CumulativePercentile > 0.3) AS min70px, 
     (SELECT MAX(Price) OVER(PARTITION BY FutContract) FROM z WHERE CumulativePercentile > 0.3) AS max70px 
FROM z 

답변

4

하는 CTE이 거의 정확히 내가 무엇을 찾고있다

;with z as 
(SELECT FutContract, 
    Quantity, 
    Date, 
    Price, 
    TotalQuantity, 
    PercentOfTotalQ, 
    CumulativePercentile= 
     (SELECT ROUND(SUM(PercentOfTotalVol),2) FROM #t1 b 
     WHERE b.OvernightVol <= a.OvernightVol AND b.FutContract = a.FutContract) 

FROM #t1 a 
) 
select 
(select min(price) from z Z1 where Z1.CumulativePercentile > 0.3 and Z1.FutContract = z.FutContract) min_price, 
(select max(price) from z Z1 where Z1.CumulativePercentile > 0.3 and Z1.FutContract = z.FutContract) max_price, 
* 
from z 
+0

도움이 될 것입니다. 그러나 하위 쿼리가 1 개 이상의 값을 반환했기 때문에 오류가 발생합니다. 각 FutContract마다 min 및 max의 각 값이 고유해야하지만 몇 가지 FutContract 및 Price 조합이 있습니다. 방금 ​​시도한 코드에서 편집했습니다. – weskpga

+0

@weskpga, 귀하의 요구 사항을 100 % 이해하고 있지만 편집 된 답변을 살펴보십시오. – iruvar

+0

그래, 편집 된 코드가 필요한 것입니다. 고맙습니다! – weskpga

관련 문제