mysql 分组取前n记录_MySql分组取前N记录

4fda398797ca2ca8c5606405ddcd7cb1.png

SELECT *

from stu_score s

WHERE 2 > (SELECT COUNT(*) from stu_score t WHERE t.class = s.class AND t.score > s.score)

ORDER BY s.class,s.score DESC

特例N=1,即取最大/最小的一条记录

SELECT *

from stu_score s

WHERE NOT EXISTS (SELECT 1 from stu_score t WHERE t.class = s.class AND t.score > s.score)

SELECT *

from stu_score s

WHERE NOT EXISTS (SELECT 1 from stu_score t WHERE t.class = s.class AND t.score < s.score)

引申:

有表A

ID    Name

1     小明

2     大明

3     三明

4     四明

表B

ID     AID   Type    date

1      1     a       2013-01-01

2      1     b       2013-01-02

3      2     a       2013-05-01

4      2     b       2013-03-02

5      3     a       2013-12-01

6      3     b       2013-01-08

7      3     a       2013-03-01

8      4     b       2013-02-02

表B的 AID是表A的外键

现要求查出

A表的Name        B表ID    B表的最后一个时间的Data     B表的最后一个时间的Type

小明               2      2013-01-02                       b

大明               3      2013-05-01                       a

三明               5     2013-12-01                        a

四明               8      2013-02-02                       b

表A关联表B的相应最大时间的记录,并且可以根据 表B的Type进行筛选数据

select a.NAME,b.id,b.[date],b.[type]

from [A] INNER JOIN b ON a.id=b.aid

WHERE EXISTS (SELECT 1 FROM (SELECT aid,MAX([date])[date] FROM b GROUP BY aid) c WHERE b.aid=c.aid AND c.[date]=b.[date])

--AND b.TYPE=xxxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值