您现在的位置是:首页 > 学无止境
找出最近的2个薪资问题
转载自:http://www.cnblogs.com/DBFocus/archive/2010/09/23/1833375.html
这两天在《SQL puzzles and answers》一书中看到这个‘找出最近的2个薪资问题’,此问题是一个非常典型的场景。在这里自己试着给出2个我一下能想到的解决方案,与大家分享 (代码在SQL Server 2008下,测试通过)。值得一提的是原书中给出了9种解决方案,有兴趣的可以去看看。
问题描述
我们有一张Salaries表,其中记录了员工薪资变化的情况。创建Salaries表脚本如下(此脚本来自与原书):
其中emp_name为员工名,sal_date为调薪日期,sal_amt为调薪后的薪资。
现在的问题是要得到一个结果集,每一个员工一条记录。结果集包含5列,第1列为emp_name,第2列date1为此员工最近一次调薪的日期,第 3列sal1为此员工最近一次调薪后的薪资,第4列date2为此员工倒数第二次调薪的日期,第5列sal2为此员工倒数第二次调薪后的薪资。
对于上例期望得到的结果为:
emp_name | date1 | sal1 | date2 | sal2 |
Tom | 1996-12-20 | 900.00 | 1996-10-20 | 800.00 |
Harry | 1996-09-20 | 700.00 | 1996-07-20 | 500.00 |
Dick | 1996-06-20 | 500.00 | NULL | NULL |
解决方案1
此方案完全使用子查询完成。其中需要注意的是where条件中的or S2.sal_date is null子句,如果没有此条件就会丢失一条记录。
解决方案2
第二种方案使用到了ROW_NUMBER()分析函数,其中的聚合计算也是一个小技巧。
解决方案3
文章评论
- 登录后评论
点击排行
-
php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1、php中...
-
centos下postgresql的安装与配置
一、安装(以root身份进行)1、检出最新的postgresql的yum配置从ht...
-
Mysql的大小写敏感性
MYSQL在默认的情况下查询是不区分大小写的,例如:CREATE TABLE...
-
关于URL编码
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding....
-
header中的Cache-control
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的...