簡體   English   中英

根據表格中的計算值獲取最小值和最大值

[英]Getting Min and Max based on calculated values in a table

我正在從我創建的臨時表#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

我想創建另外兩行代表MIN(Price)和MAX(Price),其中CumulativePercentile大於0.3(第30百分位數),但我能想到的唯一方法是創建另一個臨時表。 如果可能的話,我寧願不要這樣做。 有任何想法嗎?

編輯:

;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

如果您使用的是SQL Server 2005或更高版本,則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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM