MEMBER_ID LINE_TYPE_B COUNT(LINE_ID)
1 2 14 29
2 2 10 29
3 2 15 7
4 2 8 2
5 4 14 29
6 4 8 16
7 4 19 2
8 4 22 1
9 4 25 1
10 5512 8 29
11 6860 17 4
12 10498 10 32
13 10498 13 30
14 10905 25 6
15 11642 12 30
16 11642 11 30这一个结果集中我外面再套一层,需要得出每个MEMBER_ID中COUNT(LINE_ID)最大的那个LINE_TYPE_B.    MEMBER_ID LINE_TYPE_B COUNT(LINE_ID)
1 2 14 29
5 4 14 29
10 5512 8 29
11 6860 17 4
12 10498 10 32
14 10905 25 6
15 11642 12 30

解决方案 »

  1.   

    用row_number() over(partition by member_id order by t_count desc) rn就可以了
      

  2.   

    select number_id,
           max(line_ytpe_b),
           line_cnt
      from (select numberid,
           line_type,
           count(line_id) line_cnt 
      from table1
             group by number_id,line_type
    )
     group by number_id,line_cnt
      

  3.   

    CREATE TABLE tt(MEMBER_ID INT,LINE_TYPE_B INT,cc INT);
     
    INSERT INTO TT VALUES (2, 14, 29);
    INSERT INTO TT VALUES (2, 10, 29);
    INSERT INTO TT VALUES (2, 15, 7);
    INSERT INTO TT VALUES (2, 8, 2);
    INSERT INTO TT VALUES (4, 14, 29);
    INSERT INTO TT VALUES (4, 8, 16);
    INSERT INTO TT VALUES (4, 19, 2);
    INSERT INTO TT VALUES (4, 22, 1);
    INSERT INTO TT VALUES (4, 25, 1);
    INSERT INTO TT VALUES (5512, 8, 29);
    INSERT INTO TT VALUES (6860, 17, 4);
    INSERT INTO TT VALUES (10498, 10, 32);
    INSERT INTO TT VALUES (10498, 13, 30);
    INSERT INTO TT VALUES (10905, 25, 6);
    INSERT INTO TT VALUES (11642, 12, 30);
    INSERT INTO TT VALUES (11642, 11, 30);
    COMMIT;
    SELECT *
      FROM TT
     WHERE (MEMBER_ID, CC) IN
           (SELECT MEMBER_ID, MAX(CC)
              FROM TT
             GROUP BY MEMBER_ID);
     
    SELECT MEMBER_ID, LINE_TYPE_B, CC
      FROM (SELECT TT.*,
                   ROW_NUMBER() OVER(PARTITION BY MEMBER_ID ORDER BY LINE_TYPE_B DESC) RN
              FROM TT
             WHERE (MEMBER_ID, CC) IN
                   (SELECT MEMBER_ID, MAX(CC) FROM TT GROUP BY MEMBER_ID))
     WHERE RN = 1;