2017-07-18 84 views
0

我有一張表,其中包含以下記錄。分組並按同一張表加入

  acct_id | org_id | terr_id | segment 4  
     -------------------------------------- 
     123  | A  | 12345 | US 
     123  | A  | 45678 | CA 
     456  | B  | ABC  | US 
     456  | B  | XYZ  | US 

我需要組通過對ACCT_ID和org_id並得到,最大(段4)記錄。雖然分組通過我需要省略terr_id組,我需要它輸出的最大關聯(第4部分)。我怎樣才能做到這一點,而無需再次回到同一張桌子?

O/P必須

  acct_id | org_id | terr_id | segment 4  
     -------------------------------------- 
     123  | A  | 12345 | US 
     456  | B  | ABC or XYZ | US 
+0

你好,請編輯的問題,並添加你分組內連接試過。 – Rooben

回答

0

你可以使用由馬克斯(segment_4)

select acct_id , org_id , terr_id , segment_4 
    from my_table m 
    inner join (

     select acct_id, org_id, max(segment_4) as my_segment_4 
     from my_table 
     group by acct_id, org_id 
) t o t.acct_id = m.acct_id 
       and t.org_id = m.org_id 
        and t.my_segment_4 = m.segment_4 
+0

嗨ScaisEdge - 有沒有一種方法可以做到這一點,而無需加入回到同一張桌子? – decorooney

+0

對於我所知道的,不是..因爲你需要與max(segment_4)相關的terr_id,爲此你需要一個單獨的訪問my_table ..你可以使用一個單一的訪問,而不是與最大的terr_id相關(segment_4)你想通過terr_id得到一個比較敏感的結果,例如:min – scaisEdge

+0

謝謝ScaisEdge。 :) – decorooney

1
WITH CTE AS (
    SELECT Distinct acct_ID 
     , Org_ID 
     , Terr_ID 
     , Segment4 
     , row_number() over (partition by ACCT_ID, Org_ID order by terr_ID asc) RN 
    FROM Table 
    WHERE Terr_ID <> '45678') 
SELECT * 
FROM cte 
WHERE RN = 1