取出表內分類前N條記錄的SQL語句

2021-04-24 10:48:39 字數 2016 閱讀 8421

sql語句寫法有4種。prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com1.sql2005,情況下使用 行號 row_number()

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.comselect *

prog.phontol.comfrom

prog.phontol.com(

prog.phontol.comselect row_number() over(partition by ct order by name) as rnk,*

prog.phontol.comfrom tb_name

prog.phontol.com) as t

prog.phontol.comwhere rnk<=3

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com講解:用row_number() 以ct欄位劃分表資料,為每行資料新增行號。prog.phontol.com然後從這個結果集裡查詢出行號小於等於3的記錄,就是每類的前3條記錄。prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com不過這樣的效率很低,不推薦使用。prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com3. 利用子查詢

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.comselect *

prog.phontol.comfrom tb_name as t

prog.phontol.comwhere 3>(select count(*)

prog.phontol.comfrom tb_name

prog.phontol.comwhere ct=t.ct

prog.phontol.comand name>t.name);

prog.phontol.com

prog.phontol.com

prog.phontol.com講解:關鍵是子查詢,這裡類似乙個while迴圈,每條記錄去匹配和它同類的下一條記錄。prog.phontol.com計算以它開始算起記錄條數,意思就是他當前所在的行號,當行號小於3的時候,證明他下面有至多3條記錄,則符合子查詢條件,返回到結果集裡。prog.phontol.com這樣就查詢出了每類的前3條記錄。prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com4.這種,我沒有仔細看。prog.phontol.com就不講解了,不過原理大概也就先是取每類的前3條記錄,然後在結果集裡用in最終取出結果。prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.com

prog.phontol.comselect * from @t a

prog.phontol.comwhere checksum(*) in (select top 3 checksum(*) from @t b where a.ct=b.ct order by name desc)

SQL取出第 m 條到第 n 條記錄的方法

從table 表中取出第 m 條到第 n 條的記錄 not in 版本 select top n m 1 from table where id not in select top m 1 id from table 從table表中取出第m到n條記錄 exists版本 select top n m...

SQL取出第 m 條到第 n 條記錄的方法

分頁或者分段呼叫資料的時候很有用的啊 從table 表中取出第 m 條到第 n 條的記錄 color red not in 版本 color select top n m 1 from table where id not in select top m 1 id from table color ...

SQL查詢每個分組的前N條記錄

if object id tempdb.dbo.t is not null drop table t create table t id varchar 3 gid int,author varchar 29 title varchar 39 date datetime insert into t ...