gpt4 book ai didi

sql - 使用 ROW_NUMBER() OVER (PARTITION BY ...) 时出现问题

转载 作者:行者123 更新时间:2023-12-02 07:28:10 24 4
gpt4 key购买 nike

我使用的是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com