作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是 SQL Server 2008 R2。我有一个名为 EmployeeHistory 的表,具有以下结构和示例数据:
EmployeeID Date DepartmentID SupervisorID
10001 20130101 001 10009
10001 20130909 001 10019
10001 20131201 002 10018
10001 20140501 002 10017
10001 20141001 001 10015
10001 20141201 001 10014
请注意,随着时间的推移,员工 10001 更换了 2 个部门和几位主管。我想要做的是按“日期”字段排序列出该员工在每个部门的就业开始和结束日期。因此,输出将如下所示:
EmployeeID DateStart DateEnd DepartmentID
10001 20130101 20131201 001
10001 20131201 20141001 002
10001 20141001 NULL 001
我打算使用以下查询对数据进行分区,但失败了。部门从 001 更改为 002,然后又更改回 001。显然我无法按 DepartmentID 进行分区...我确信我忽略了显而易见的事情。有什么帮助吗?提前谢谢您。
SELECT * ,ROW_NUMBER() OVER (PARTITION BY EmployeeID, DepartmentID
ORDER BY [Date]) RN FROM EmployeeHistory
最佳答案
我会做这样的事情:
;WITH x
AS (SELECT *,
Row_number()
OVER(
partition BY employeeid
ORDER BY datestart) rn
FROM employeehistory)
SELECT *
FROM x x1
LEFT OUTER JOIN x x2
ON x1.rn = x2.rn + 1
或者可能是 x2.rn - 1。你必须看看。无论如何,你明白了。一旦您将表格连接起来,您就可以进行过滤、分组、排序等以获得您需要的内容。
关于sql - 使用 ROW_NUMBER() OVER (PARTITION BY ...) 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19921327/
我是一名优秀的程序员,十分优秀!