sql server 擷取每一個類別中值最大的一條資料

來源:互聯網
上載者:User

標籤:des   blog   http   color   io   ar   資料   div   sp   

/* 資料如下: name val memo a    2   a2(a的第二個值) a    1   a1--a的第一個值 a    3   a3:a的第三個值 b    1   b1--b的第一個值 b    3   b3:b的第三個值 b    2   b2b2b2b2 b    4   b4b4 b    5   b5b5b5b5b5 */--建立表並插入資料: create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values(‘a‘,    2,   ‘a2(a的第二個值)‘) insert into tb values(‘a‘,    1,   ‘a1--a的第一個值‘) insert into tb values(‘a‘,    3,   ‘a3:a的第三個值‘) insert into tb values(‘b‘,    1,   ‘b1--b的第一個值‘) insert into tb values(‘b‘,    3,   ‘b3:b的第三個值‘) insert into tb values(‘b‘,    2,   ‘b2b2b2b2‘) insert into tb values(‘b‘,    4,   ‘b4b4‘) insert into tb values(‘b‘,    5,   ‘b5b5b5b5b5‘) go    --一、按name分組取val最大的值所在行的資料。 --方法1: select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name--方法2: select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val) --方法3: 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.name--方法4: 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.name--方法5 select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name/* name       val         memo                  ---------- ----------- --------------------  a          3           a3:a的第三個值 b          5           b5b5b5b5b5 */    

寫法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不正確。

例如:

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

 

sql server 擷取每一個類別中值最大的一條資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.