mysql 分组查询top_QL查询案例:取得分组 TOP-N

【转】SQL查询案例:取得分组 TOP-N CREATE TABLE TopnTest ( name VARCHAR(10), --姓名 procDate DATETIME, --处理时间 result INT --成绩 ); INSERT INTO TopnTest VALUES('张三', '2010-10-01 12:00:05', 80); INSERT INTO TopnTest VALUES('张三', '2010

【转】SQL查询案例:取得分组 TOP-N

CREATE TABLE TopnTest (

name VARCHAR(10), --姓名

procDate DATETIME, --处理时间

result INT --成绩

);

INSERT INTO TopnTest VALUES('张三', '2010-10-01 12:00:05', 80);

INSERT INTO TopnTest VALUES('张三', '2010-10-01 12:20:05', 85);

INSERT INTO TopnTest VALUES('张三', '2010-10-02 07:25:15', 79);

INSERT INTO TopnTest VALUES('张三', '2010-10-02 10:30:05', 88);

INSERT INTO TopnTest VALUES('张三', '2010-10-03 15:05:05', 86);

INSERT INTO TopnTest VALUES('李四', '2010-10-01 06:00:05', 60);

INSERT INTO TopnTest VALUES('李四', '2010-10-04 08:00:05', 90);

INSERT INTO TopnTest VALUES('李四', '2010-10-05 10:00:05', 75);

INSERT INTO TopnTest VALUES('李四', '2010-10-08 11:00:05', 88);

INSERT INTO TopnTest VALUES('李四', '2010-10-09 12:00:05', 60);

INSERT INTO TopnTest VALUES('王五', '2010-09-10 08:00:05', 70);

INSERT INTO TopnTest VALUES('王五', '2010-09-14 08:00:05', 80);

INSERT INTO TopnTest VALUES('王五', '2010-09-25 18:00:05', 75);

INSERT INTO TopnTest VALUES('王五', '2010-09-28 18:00:05', 88);

INSERT INTO TopnTest VALUES('王五', '2010-10-09 12:00:05', 70);

要求

取得每个人的最近2次处理时间的详细记录情况。

思路

如果仅仅是一个人的最近2次,那么直接TOP 2或者Rownum <= 2可以处理。

每个人的最近1次,也可以通过SELECT MAX() GROUP BY来实现。

每个人的最近2次,需要自己和自己关联,才能解决了。

实现

SELECT

*

FROM

TopnTest

WHERE

( SELECT

COUNT(1)

FROM

TopnTest subTopnTest

WHERE

TopnTest.name = subTopnTest.name

AND TopnTest.procDate < subTopnTest.procDate

) < 2

ORDER BY

name, procDate

执行结果

name procDate result

---------- ----------------------- -----------

李四 2010-10-08 11:00:05.000 88

李四 2010-10-09 12:00:05.000 60

王五 2010-09-28 18:00:05.000 88

王五 2010-10-09 12:00:05.000 70

张三 2010-10-02 10:30:05.000 88

张三 2010-10-03 15:05:05.000 86

如果上面的 SQL , 你不怎么看得懂, 那么下面这样的写法,与执行结果,应该能让你更加容易明白一些上面的SQL的处理的原理。

SELECT

name,

procDate,

result,

( SELECT

COUNT(1)

FROM

TopnTest subTopnTest

WHERE

TopnTest.name = subTopnTest.name

AND TopnTest.procDate < subTopnTest.procDate

) AS [有多少行数据处理时间比当前行大]

FROM

TopnTest

ORDER BY

name, procDate

name procDate result 有多少行数据处理时间比当前行大

---------- ----------------------- ----------- ---------------

李四 2010-10-01 06:00:05.000 60 4

李四 2010-10-04 08:00:05.000 90 3

李四 2010-10-05 10:00:05.000 75 2

李四 2010-10-08 11:00:05.000 88 1

李四 2010-10-09 12:00:05.000 60 0

王五 2010-09-10 08:00:05.000 70 4

王五 2010-09-14 08:00:05.000 80 3

王五 2010-09-25 18:00:05.000 75 2

王五 2010-09-28 18:00:05.000 88 1

王五 2010-10-09 12:00:05.000 70 0

张三 2010-10-01 12:00:05.000 80 4

张三 2010-10-01 12:20:05.000 85 3

张三 2010-10-02 07:25:15.000 79 2

张三 2010-10-02 10:30:05.000 88 1

张三 2010-10-03 15:05:05.000 86 0

(15 行受影响),

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值