2017-07-18 43 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