簡體   English   中英

SSMS:如何只返回每個月/年的最后一行而不是每一行的值?

[英]SSMS: How to return only the value in the last row for each month/year instead of every row?

我正在使用的代碼返回月/年中的所有日期,但我只希望它返回最后一個日期行而不是所有每日行。

這是我正在使用的代碼。

;WITH OIL_INDEX AS (
    SELECT PRODUCT_SYMBOL
    ,CONTRACT_MONTH
    ,CONTRACT_YEAR
    ,CONTRACT_DETAIL
    ,TRADEDATE
    ,SETTLE
    ,AVG(SETTLE) OVER (
            PARTITION BY CONTRACT_DETAIL, YEAR(TRADEDATE), MONTH(TRADEDATE)
            ORDER BY TRADEDATE 
            ROWS BETWEEN 29 PRECEDING and CURRENT ROW
        ) AS MA30
    ,YEAR(TRADEDATE) AS TRADEYEAR
    ,MONTH(TRADEDATE) AS TRADEMONTH
    ,DAY(TRADEDATE) AS TRADEDAY
    ,row_number() OVER(
     PARTITION BY CONTRACT_DETAIL, TRADEDATE
      ORDER BY TRADEDATE DESC) AS RowNum
     FROM Pricing.dbo.MasterReport$

)

SELECT PRODUCT_SYMBOL
    ,CONTRACT_MONTH
    ,CONTRACT_YEAR
    ,CONTRACT_DETAIL
    ,TRADEDATE
    ,TRADEYEAR
    ,TRADEMONTH
    ,TRADEDAY
    ,SETTLE
    ,MA30
    FROM OIL_INDEX
    WHERE RowNum = 1 AND PRODUCT_SYMBOL
    IN ('CL','CY','WJ')
    ORDER BY PRODUCT_SYMBOL ASC, CONTRACT_DETAIL ASC,TRADEYEAR ASC, TRADEMONTH ASC, TRADEDAY ASC

這是給出的結果。

示例結果

這是我想要的。

在此處輸入圖片說明

我認為你只需要修改窗口函數的PARTITION BY子句:

前:

ROW_NUMBER() OVER(
    PARTITION BY CONTRACT_DETAIL, TRADEDATE
    ORDER BY TRADEDATE DESC
) AS RowNum

后:

ROW_NUMBER() OVER(
    PARTITION BY CONTRACT_DETAIL, YEAR(TRADEDATE), MONTH(TRADEDATE)
    ORDER BY TRADEDATE DESC
) AS RowNum

基本原理:您的分區子句為每個不同的(CONTRACT_DETAIL, TRADEDATE )元組創建一個新組; 這是生成很多組的利利,每個組可能只有一個記錄。 相反,您希望按合同和月份進行分區,然后按交易日期對每個組中的記錄進行排名。

暫無
暫無

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

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