你真的会玩 SQL 吗?冷落的 Top 和 Apply

本章预先想写一些Top和Apply基本的用法,但好像没什么意义,所以删掉了一些无用的东西,只留下几个示例,以保证系列的完整性。

Top和Apply解决的常见问题,如返回每个雇员的3个最新订单,订单的时间越新优先级就越高,但还需要引入一个决胜属性,以确定时间桢的订单的优先级,如可用id作为决胜属性。这里提供的解决方案比其它方案要简单得多,且执行速度更快。

返回每个雇员的3个最新订单:

运用APPLY解决:

先扫描employees 获得empid,对每个empid值对orders表查询返回 该雇员的3个最新订单。这里可以返回多个属性。

还有一种解决方案在特定情况下竟然比使用APPLY运算符的方法还要快,使用ROW_NUMBER函数。先为每个订单计算行号,按empid进行分区,并按orderdate desc, orderid desc 顺序排序。然后在外部查询中,只筛选行号小于或等于3的行。

如下:

 

练习:

从学生表中选取对应班级的前num名学生成绩

 

参考SQL:

1 1 收藏 1 评论

关于作者:欢醉

因为专注,所以专业NET,UDP\\TCP开发,架构设计,数据库,Jquery插件开发,微信开发,android应用,O2O商业模式开发微信公众号【一个码农的日常】 个人主页 · 我的文章 · 4 ·    

相关文章

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部