現有乙個這樣的需求:在一張表中取有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條資料;
selectfrom
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...