sql取出每组的前N条记录

MySQL中有个表:article(字段:id,type,date),type有1-10,10种类型。现在要用SQL找出每种类型中时间最新的前N个数据组成的集合。

select a1.* from article a1
inner join
(select a.type,a.date from article a left join article b
on a.type=b.type and a.date<=b.date
group by a.type,a.date
having count(b.date)<=2
)b1
on a1.type=b1.type and a1.date=b1.date
order by a1.type,a1.date desc

就想要问下 a.date<=b.date 是什么意思
count(b.date)<=2又是啥意思

第1个回答  2019-09-25

将date改成了金额cash,原理是相同的~~~

括号内的部分是对article表进行自连接(表a和表b),连接条件: a.type=b.type and a.date<=b.date 的意思是:对于a表中的某一行,找出在b表对应的相同type中有多少个比a表该行金额大(>=)的个数。

如果a表中某一行是该type中的最大值,那么 a.type=b.type and a.cash<=b.cash 在b表对应type中只有1条满足条件;a表中为该type的第二大值,则b表中满足条件的有2条记录,以此类推···  

相当于Excel总的countifs函数 :

第2个回答  2017-06-03
什么数据库?不同数据的sql是不同的.mysql,postgresql用limit和offset.sql server 用两次top.firebird用rows.其它的我不知道.追问

orcal

本回答被提问者采纳
相似回答