<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yxhxj2006

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    按某一字段分組取最大(小)值所在行的數(shù)據(jù)

    /*

    數(shù)據(jù)如下:

    name val memo

    a    2   a2(a的第二個(gè)值)

    a    1   a1--a的第一個(gè)值

    a    3   a3:a的第三個(gè)值

    b    1   b1--b的第一個(gè)值

    b    3   b3:b的第三個(gè)值

    b    2   b2b2b2b2

    b    4   b4b4

    b    5   b5b5b5b5b5

    */

    --創(chuàng)建表并插入數(shù)據(jù):

    create table tb(name varchar(10),val int,memo varchar(20))

    insert into tb values('a',    2,   'a2(a的第二個(gè)值)')

    insert into tb values('a',    1,   'a1--a的第一個(gè)值')

    insert into tb values('a',    3,   'a3:a的第三個(gè)值')

    insert into tb values('b',    1,   'b1--b的第一個(gè)值')

    insert into tb values('b',    3,   'b3:b的第三個(gè)值')

    insert into tb values('b',    2,   'b2b2b2b2')

    insert into tb values('b',    4,   'b4b4')

    insert into tb values('b',    5,   'b5b5b5b5b5')

    go

     

    --一、按name分組取val最大的值所在行的數(shù)據(jù)。

    --方法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的第三個(gè)值

    b          5           b5b5b5b5b5

    */

     

    --二、按name分組取val最小的值所在行的數(shù)據(jù)。

    --方法1:

    select a.* from tb a where val = (select min(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,min(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 , min(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          1           a1--a的第一個(gè)值

    b          1           b1--b的第一個(gè)值

    */

     

    --三、按name分組取第一次出現(xiàn)的行所在的數(shù)據(jù)。

    select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name

    /*

    name       val         memo                

    ---------- ----------- --------------------

    a          2           a2(a的第二個(gè)值)

    b          1           b1--b的第一個(gè)值

    */

     

    --四、按name分組隨機(jī)取一條數(shù)據(jù)。

    select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name

    /*

    name       val         memo                

    ---------- ----------- --------------------

    a          1           a1--a的第一個(gè)值

    b          5           b5b5b5b5b5

    */

     

    --五、按name分組取最小的兩個(gè)(N個(gè))val

    select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.val

    select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val

    select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name

    /*

    name       val         memo                

    ---------- ----------- --------------------

    a          1           a1--a的第一個(gè)值

    a          2           a2(a的第二個(gè)值)

    b          1           b1--b的第一個(gè)值

    b          2           b2b2b2b2

    */

     

    --六、按name分組取最大的兩個(gè)(N個(gè))val

    select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name,a.val

    select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val

    select a.* from tb a where exists (select count(*) from tb where name = a.name and val > a.val having Count(*) < 2) order by a.name

    /*

    name       val         memo                

    ---------- ----------- --------------------

    a          2           a2(a的第二個(gè)值)

    a          3           a3:a的第三個(gè)值

    b          4           b4b4

    b          5           b5b5b5b5b5

    */

    --七,如果整行數(shù)據(jù)有重復(fù),所有的列都相同。

    /*

    數(shù)據(jù)如下:

    name val memo

    a    2   a2(a的第二個(gè)值)

    a    1   a1--a的第一個(gè)值

    a    1   a1--a的第一個(gè)值

    a    3   a3:a的第三個(gè)值

    a    3   a3:a的第三個(gè)值

    b    1   b1--b的第一個(gè)值

    b    3   b3:b的第三個(gè)值

    b    2   b2b2b2b2

    b    4   b4b4

    b    5   b5b5b5b5b5

    */

    --在sql server 2000中只能用一個(gè)臨時(shí)表來解決,生成一個(gè)自增列,先對(duì)val取最大或最小,然后再通過自增列來取數(shù)據(jù)。

    --創(chuàng)建表并插入數(shù)據(jù):

    create table tb(name varchar(10),val int,memo varchar(20))

    insert into tb values('a',    2,   'a2(a的第二個(gè)值)')

    insert into tb values('a',    1,   'a1--a的第一個(gè)值')

    insert into tb values('a',    1,   'a1--a的第一個(gè)值')

    insert into tb values('a',    3,   'a3:a的第三個(gè)值')

    insert into tb values('a',    3,   'a3:a的第三個(gè)值')

    insert into tb values('b',    1,   'b1--b的第一個(gè)值')

    insert into tb values('b',    3,   'b3:b的第三個(gè)值')

    insert into tb values('b',    2,   'b2b2b2b2')

    insert into tb values('b',    4,   'b4b4')

    insert into tb values('b',    5,   'b5b5b5b5b5')

    go

     

    select * , px = identity(int,1,1) into tmp from tb

     

    select m.name,m.val,m.memo from

    (

     select t.* from tmp t where val = (select min(val) from tmp where name = t.name)

    ) m where px = (select min(px) from

    (

     select t.* from tmp t where val = (select min(val) from tmp where name = t.name)

    ) n where n.name = m.name)

     

    drop table tb,tmp

     

    /*

    name       val         memo

    ---------- ----------- --------------------

    a          1           a1--a的第一個(gè)值

    b          1           b1--b的第一個(gè)值

     

    (2 行受影響)

    */

    --在sql server 2005中可以使用row_number函數(shù),不需要使用臨時(shí)表。

    --創(chuàng)建表并插入數(shù)據(jù):

    create table tb(name varchar(10),val int,memo varchar(20))

    insert into tb values('a',    2,   'a2(a的第二個(gè)值)')

    insert into tb values('a',    1,   'a1--a的第一個(gè)值')

    insert into tb values('a',    1,   'a1--a的第一個(gè)值')

    insert into tb values('a',    3,   'a3:a的第三個(gè)值')

    insert into tb values('a',    3,   'a3:a的第三個(gè)值')

    insert into tb values('b',    1,   'b1--b的第一個(gè)值')

    insert into tb values('b',    3,   'b3:b的第三個(gè)值')

    insert into tb values('b',    2,   'b2b2b2b2')

    insert into tb values('b',    4,   'b4b4')

    insert into tb values('b',    5,   'b5b5b5b5b5')

    go

     

    select m.name,m.val,m.memo from

    (

     select * , px = row_number() over(order by name , val) from tb

    ) m where px = (select min(px) from

    (

     select * , px = row_number() over(order by name , val) from tb

    ) n where n.name = m.name)

     

    drop table tb

     

    /*

    name       val         memo

    ---------- ----------- --------------------

    a          1           a1--a的第一個(gè)值

    b          1           b1--b的第一個(gè)值

     

    (2 行受影響)

    */

     

      

    posted on 2012-11-02 19:21 奮斗成就男人 閱讀(405) 評(píng)論(0)  編輯  收藏 所屬分類: SQL

    主站蜘蛛池模板: 亚洲人成在线免费观看| 国产乱妇高清无乱码免费| 99久久人妻精品免费二区| 亚洲精品国产综合久久一线| 国产一区二区三区亚洲综合| 永久免费bbbbbb视频| 亚洲精华国产精华精华液网站| 无码专区永久免费AV网站| 亚洲国产精品综合久久网各| 亚洲成人免费电影| 亚洲国产精品白丝在线观看| 成人无码区免费A片视频WWW| 久久亚洲最大成人网4438| 日韩精品无码区免费专区| 亚洲色一区二区三区四区| 高清国语自产拍免费视频国产 | 一级午夜免费视频| 国产精品亚洲不卡一区二区三区| 一级做a爰片性色毛片免费网站| 亚洲精品无码久久久久AV麻豆| 一级做a毛片免费视频| 久久国产亚洲精品麻豆| 久久久久久夜精品精品免费啦| 亚洲精品不卡视频| 成人超污免费网站在线看| 美女黄频视频大全免费的| 亚洲无av在线中文字幕| 99精品一区二区免费视频| 狠狠色伊人亚洲综合网站色| 国产在线不卡免费播放| 热久久这里是精品6免费观看| 亚洲国产香蕉碰碰人人| 日本精品人妻无码免费大全| 美女视频黄频a免费| 亚洲人成网站在线播放vr| 最近高清中文字幕免费| 真正全免费视频a毛片| 国产A在亚洲线播放| 德国女人一级毛片免费| 国产日韩精品无码区免费专区国产| 亚洲国语精品自产拍在线观看|