mysql 取每個分類的前N條資料。

2021-09-11 20:53:48 字數 1568 閱讀 2905

現有乙個這樣的需求:在一張表中取有100個分類下的1000條資料。現要取每個分類下的前4條資料。

表結構如下:

`id` varchar(32) not null comment 'id',

`isvalid` varchar(2) default null comment '邏輯刪除標識1正常0刪除',

`createtime` datetime default null comment '建立時間',

`updatetime` datetime default null comment '更新時間',

`name` varchar(32) default null comment '名稱',

primary key (`id`)

) engine=innodb default charset=utf8;

取前n條之前先看乙個根據時間排序的資料。

left join

and b.createtime >= ay.createtime

where ay.isvalid=1 and b.isvalid=1

查詢結果如下:

現取某個分類的前4條

select

from

where

ay.isvalid = 1

and

( select

count(1)

from

where

and b.isvalid=1

and b.createtime >= ay.createtime

) <=4

order by

結果如下:

另外當發現分類太多時,只選擇最多2個分類有資料且,選取其中4條資料;

select

from

where

ay.isvalid = 1

select

c.id

from

( select

t.id

from

where

t.isvalid = 1

and exists (

select

1from

where

)order by

length(t.sort) asc,

t.sort asc

limit 2

) as c

)and

( select

count(1)

from

where

and b.isvalid=1

and b.createtime >= ay.createtime

) <=4

order by

#此處需要先查詢 分類表 文中沒有需要自己建立

mysql 查詢分組裡的第n條資料,前n條資料

select uname,salary,address,new rank from select uname,salary,address,如果臨時變數等於 address,就 1,否則從1開始 if tmpaddress address,rank rank 1 rank 1 as new rank...

隨機取mysql的N條資料

先來個看似複雜的 需要查user表裡,code為100,的隨機不重複的2兩個name值 select from select id,name,code from user where code 100 as t1 join select round rand select max id from u...

sql取分組的前幾條 指定條數

注 sqlserver下 create table test areaid int,score int insert into test select 0,10 union all select 0,20 union all select 0,30 union all select 0,40 uni...