表 table
id   categoryid     severityId  name
1    1              1           name1
2    1              2           name2
3    1              3           name3
4    2              1           name4
5    2              2           name5如何实现下面结果
categoryid     severityId  name
1              3           name3
2              2           name5
也就是说
categoryid 重复时,取severityId 最大的纪录

解决方案 »

  1.   

    select * from table 
    where (categoryid,severityId)
    in
    (
    select categoryid,max(severityId)
    from table
    group by categoryid
    )
      

  2.   

    select a.* from table a,
    (
    select categoryid,max(severityId) as severityId
    from table
    group by categoryid
    ) b
    where a.categoryid=b.categoryid and a.severityId=b.severityId
      

  3.   

    select distinct categoryid ,max(severityId  ),max(name)
    from table
    group by categoryid
      

  4.   

    100分来凑下热闹select b.* from (select categoryid,max(severityId) as severityId2 from table
    group by categoryid) a,categoryid b
    where a.categoryid=b.categoryid
    and a.severityId2=b.severityId
      

  5.   

    select a.categoryid, a.severityId, a.name from list a where a.severityId = (select max(b.severityId) from list b where b.categoryid = a.categoryid group by b.categoryid);
      

  6.   

    select A,max(B) B from test_xwh N group by A having count(A)>1
      

  7.   


    select *
    from (
         select t.*
               ,row_number()over(partition by categoryid order by severityId  desc ) rn
         from table t
    )where rn=1
      

  8.   

    我在给一种方法是对name字段处理后的效果,可以说对name是否最大也可以处理,真正的放之四海而皆准的语句:
    select M.* from test_xwh M ,(select A,max(B) B from test_xwh N group by A having count(A)>1) N where M.A=N.A and M.B=N.B
      

  9.   

    我在给一种方法是对name字段处理后的效果,可以说对name是否最大也可以处理,真正的放之四海而皆准的语句:
    select M.* from table M ,(select categoryid,max(severityId) severityId from test_xwh N group by categoryid having count(categoryid)>1) N where M.categoryid=N.categoryid and M.severityId=N.severityId
      

  10.   

    我再给一种方法是对name字段处理后的效果,可以说对name是否最大也可以处理,真正的放之四海而皆准的语句:
    select M.* from table M ,(select categoryid,max(severityId) severityId from test_xwh N group by categoryid having count(categoryid)>1) N where M.categoryid=N.categoryid and M.severityId=N.severityId
      

  11.   

    select * from table t where exist(
    select 1 from (
    ( select max(id) from table group by categoryid )v
    where t.id=v.id)
      

  12.   

    把分给xxhsjp(),其它都可以免了。
      

  13.   

    至于用GROUP BY么?
    SELECT m.*
    FROM   (
            SELECT categoryid,severityId,name, 
                   ROW_NUMBER() OVER (PARTITION BY categoryid ORDER BY name desc) AS SEQ
            FROM table
           ) m
    WHERE  m.SEQ = 1
    /
      

  14.   

    --总结楼上的
    1。
    select *
    from (
         select t.*
               ,row_number()over(partition by categoryid order by severityId  desc ) rn
         from table t
    )where rn=1 
    2。再有就是利用子查询
    select * from table 
    where (categoryid,severityId)
    in
    (
    select categoryid,max(severityId)
    from table
    group by categoryid
    )
      

  15.   

    select distinct categoryid,
                    max(severityid) over(partition by categoryid) severityId,
                    max(name) over(partition by categoryid) name
      from table;