分组并加入同一张桌子

时间:2017-07-18 16:24:24

标签: sql oracle group-by

我有一张包含以下记录的表格。

         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上分组并获取max(段4)的记录..虽然我需要在group by中省略terr_id,但我需要在输出中为相关的max(段4) 。如果不再次回到同一张桌子,我怎么能这样做呢?

o / p需要

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用内部联接,其分组为max(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
相关问题