你的位置:首页 > 数据库

[数据库]【转】sql server 获取每一个类别中值最大的一条数据

 1 /* 2 数据如下: 3 name val memo 4 a  2  a2(a的第二个值) 5 a  1  a1--a的第一个值 6 a  3  a3:a的第三个值 7 b  1  b1--b的第一个值 8 b  3  b3:b的第三个值 9 b  2  b2b2b2b210 b  4  b4b411 b  5  b5b5b5b5b512 */13 --创建表并插入数据:14 create table tb(name varchar(10),val int,memo varchar(20))15 insert into tb values('a',  2,  'a2(a的第二个值)')16 insert into tb values('a',  1,  'a1--a的第一个值')17 insert into tb values('a',  3,  'a3:a的第三个值')18 insert into tb values('b',  1,  'b1--b的第一个值')19 insert into tb values('b',  3,  'b3:b的第三个值')20 insert into tb values('b',  2,  'b2b2b2b2')21 insert into tb values('b',  4,  'b4b4')22 insert into tb values('b',  5,  'b5b5b5b5b5')23 go24  25 --一、按name分组取val最大的值所在行的数据。26 --方法1:27 select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name28 --方法2:29 select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)30 --方法3:31 select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name32 --方法4:33 select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name34 --方法535 select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name36 /*37 name    val     memo         38 ---------- ----------- -------------------- 39 a     3      a3:a的第三个值40 b     5      b5b5b5b5b541 */42 43   

写法6

SELECT  *
FROM    (
          SELECT    * ,
                    ROW_NUMBER() OVER ( PARTITION BY name ORDER BY val DESC ) rid
          FROM      tb
        ) AS t
WHERE   rid = 1

 

 

如果上述存在一个name组中有两个以上相同的val,则查询方法1-5不正确。但是可以对方法1-5进行去重处理

例如:

insert into tb values('a',    2,   'a2(a的第二个值)') 
insert into tb values('a',    3,   'a1--a的第一个值') 
insert into tb values('a',    3,   'a3:a的第三个值')

俄罗斯旅游哪里好玩俄罗斯旅游行程深圳到俄罗斯旅游厦门西坑自助旅游攻略 2015梅州旅游游记 带你领略泰国铺在铁轨上的市场 信宜漂流哪个好玩?广东信宜漂流哪个刺激? 信宜甲门漂流地址?信宜市甲门峡漂流景区怎么走? 信宜甲门峡漂流优惠门票怎么买?甲门峡漂流网上预订便宜吗? 稻城藏戏面具的由来 九寨沟宗教文化嘛尼堆介绍 峨眉山今朝十景 河源野趣沟怎么走? 深圳到清远阳山神笔仙洞怎么走? 河源野趣沟好玩吗? MOSFET Semiconductor BC856S,115 Datasheet MOSFET Semiconductor BC556 Datasheet T322B155K025ASTR Datasheet Capacitor T322B155K025AT Datasheet EKMX401ELL220ML20S Datasheet EKMX401ELL330M20S Datasheet 重庆去阿尔巴尼亚旅游 重庆去阿尔巴尼亚旅游 重庆去阿尔巴尼亚旅游 重庆去阿尔及利亚旅游 重庆去阿尔及利亚旅游 重庆去阿尔及利亚旅游