我有一個 3 串列(CompanyName、CompanyCategory、StartDate),這是一個公司名稱,后跟一個公司類別,以及下面示例中該類別的開始日期。根據公司類別的開始日期,我正在努力在當前不存在的 STATUS 列下將類別標記為 NEW 或 EXISTING。
FIRST 將是公司內按日期劃分的第一個類別,該給定公司的所有未來類別按日期標記為 NOT FIRST。我有 3 列,希望生成第 4 列(狀態),但不清楚如何有效利用 PARTITION 等方法在公司內按日期對正確類別進行分類。
CompanyName | CompanyCategory | StartDate | Status (Need to Generate)
---------------------------------------------------------------------
CompanyA CategoryA 2020-01-01 First
CompanyA CategoryB 2020-02-01 Not First
CompanyB CategoryA 2020-01-01 First
CompanyB CategoryB 2020-03-01 Not First
CompanyC CategoryA 2020-04-01 First
CompanyC CategoryB 2020-06-01 Not First
CompanyC CategoryC 2020-10-01 Not First
CompanyD CategoryA 2021-10-01 First
CompanyD CategoryB 2021-11-01 Not First
CompanyD CategoryC 2021-02-01 Not First
嘗試了下面的代碼,但沒有正確出來
(case when row_number() over (partition by table.companycategory order by o.startdate
) = 1 then 'FIRST' else 'NOT FIRST' end) as STATUS
uj5u.com熱心網友回復:
我很確定您只是按錯誤的列進行了磁區。這會產生問題中的結果:
SELECT CompanyName, CompanyCategory, StartDate,
Status = CASE (ROW_NUMBER() OVER
(PARTITION BY CompanyName ORDER BY StartDate))
WHEN 1 THEN '' ELSE 'NOT ' END 'FIRST'
FROM dbo.SomeTable;
如果您嘗試按年齡對類別進行分類,請更正問題中列出的所需結果以反映這一點,但這只會更改為:
SELECT CompanyName, CompanyCategory, StartDate,
Status = CASE (ROW_NUMBER() OVER
(PARTITION BY CompanyCategory ORDER BY StartDate))
WHEN 1 THEN '' ELSE 'NOT ' END 'FIRST'
FROM dbo.SomeTable;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/455288.html
下一篇:以升序排列,不包括一項
