sql取出每组的前N条记录

MySQL中有个表:article(字段:id,type,date),type有1-10,10种类型。现在要用SQL找出每种类型中时间最新的前N个数据组成的集合。sele... 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又是啥意思
展开
 我来答
wmw316126
2019-09-25 · 超过22用户采纳过TA的回答
知道答主
回答量:46
采纳率:100%
帮助的人:35.7万
展开全部

将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函数 :

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
人来天井茗茶p
2017-06-03 · TA获得超过321个赞
知道小有建树答主
回答量:315
采纳率:57%
帮助的人:44.8万
展开全部
什么数据库?不同数据的sql是不同的.mysql,postgresql用limit和offset.sql server 用两次top.firebird用rows.其它的我不知道.
追问
orcal
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式