簡體   English   中英

在單獨的列中獲取最大日期(月和年)

[英]get maximum date in separated columns (month and year)

我有這張桌子:

Month   Year    Provider    Number
1       2015    1           345
2       2015    1           345
3       2015    1           345
12      2015    2           444
1       2016    2           444

假設我想按提供商獲取所有不同的數字,但只能獲取最大月份和最大年份,如下所示:

Month   Year    Provider    Number
3       2015    1           345
1       2016    2           444

我有一個我想改進的丑陋查詢:

SELECT (SELECT max([Month]) 
        FROM dbo.Info b
        WHERE b.Provider = a.Provider
          AND b.Number = a.Number
          AND [Year] = (SELECT max([Year]) 
                          FROM dbo.Info c
                         WHERE c.Provider = a.Provider
                           AND c.Number = a.Number)) AS [Month],
        (SELECT max([Year]) 
           FROM dbo.Info d
          WHERE d.Provider = a.Provider
            AND d.Number = a.Number)) AS [Year],
        a.Provider,
        a.Number
 FROM dbo.Info a

一種選擇是使用row_number

select *
from (
    select *, row_number() over (partition by provider 
                                 order by [year] desc, [month] desc) rn
    from dbo.Info
) t
where rn = 1

假定數字和提供者字段相同。 如果不是,您可能還需要按數字字段進行分區。

您可以使用row_number和cte

;WITH cte AS (
  SELECT 
    *,
    ROW_NUMBER() OVER (PARTITION BY Provider ORDER BY [Year] DESC, [Month] DESC) as rNum
  FROM Info)

SELECT *
FROM cte where rNum = 1

如果要創建視圖,則

CREATE VIEW SomeViewName
AS

WITH cte AS (
  SELECT 
    *,
    ROW_NUMBER() OVER (PARTITION BY Provider ORDER BY [Year] DESC, [Month] DESC) as rNum
  FROM Info)

SELECT *
FROM cte where rNum = 1

暫無
暫無

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

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