簡體   English   中英

SQL查詢-分區依據

[英]SQL Query - Partition by

從下表中,需要以綠色讀取所有記錄。 對於按sfdc_acc列划分的每個組,請根據狀態檢索最新記錄。 如果一個分區中的狀態為“可用”或“不可用”,則需要使用“可用”來檢索最新記錄。

表

該查詢未返回預期的正確結果:

SELECT 
    A.* 
FROM
    (SELECT 
         TEMP.*,
         ROW_NUMBER () OVER (PARTITION BY ERP_ACC 
                             ORDER BY LASTMODIFIEDDATE DESC, STATUS ASC) AS RN 
     FROM 
         TEMP) A 
WHERE 
    A.RN = 1

如何修改查詢以在分區子句中包括狀態檢查?

為什么不僅對Available記錄應用過濾器。

SELECT A.* FROM
(
    SELECT TEMP.*,ROW_NUMBER () OVER (PARTITION BY ERP_ACC ORDER BY LASTMODIFIEDDATE DESC) AS RN FROM TEMP
    where STATUS = 'Available'
) A WHERE A.RN=1

我想你要:

SELECT A.*
FROM (SELECT T.*,
             ROW_NUMBER () OVER (PARTITION BY ERP_ACC, STATUS ORDER BY LASTMODIFIEDDATE DESC) AS RN
      FROM TEMP T
     ) T
WHERE STATUS = 'Available' AND T.RN = 1;

假設您只需要可用狀態:

DECLARE @Table TABLE ( LASTMODIFIEDDATE DATETIME, ERP_ACC int, sfdc_acc VARCHAR(20), status VARCHAR(20))

INSERT INTO @Table VALUES ('3/31/2017', 156, 'ABC', 'Available')
INSERT INTO @Table VALUES ('3/30/2017', 678, 'ABC', 'Available')
INSERT INTO @Table VALUES ('10/17/2016', 872, 'ABC', 'Available')
INSERT INTO @Table VALUES ('08/02/2016', 900, 'ABC', 'Available')
INSERT INTO @Table VALUES ('06/09/2017', 100, 'GHK', 'Not Available')
INSERT INTO @Table VALUES ('05/01/2017', 456, 'GHK', 'Not Available')
INSERT INTO @Table VALUES ('08/02/2016', 954, 'GHK', 'Available')

更新了我的答案,請注意將條件設置為“狀態”。 如果“可用”,則為1,如果沒有,則為2。這將確保所有狀態為“可用”的記錄都是優先級。

SELECT * FROM 
(SELECT LASTMODIFIEDDATE,
        ERP_ACC,
        sfdc_acc,
        status, ROW_NUMBER () OVER (PARTITION BY sfdc_acc 
        ORDER BY 
        CASE WHEN status = 'Available' THEN 1 ELSE 2 END ASC, 
        LASTMODIFIEDDATE DESC) AS RN FROM @Table) A
WHERE A.RN = 1 

這樣的事情應該起作用。 您需要先按狀態排序,然后再按時間戳排序,以便首先放置“可用”記錄,然后再放置其他所有內容。

SELECT 
    A.* 
FROM
    (SELECT 
         TEMP.*,
         ROW_NUMBER () OVER (PARTITION BY ERP_ACC 
                             ORDER BY CASE WHEN STATUS = 'Available' THEN 1 ELSE 2 END, LASTMODIFIEDDATE DESC) AS RN 
     FROM 
         TEMP) A 
WHERE 
    A.RN = 1

暫無
暫無

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

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