【发布时间】:2021-09-11 14:06:08
【问题描述】:
我有一张桌子
| Date | Job_Id | Employee_ID | Status |
|---|---|---|---|
| 2021-01-01 | Teacher | 10 | Active |
| 2021-02-01 | Teacher | 10 | Active |
| 2021-03-01 | Teacher | 10 | Retired |
| 2021-04-01 | Teacher | 10 | Active |
| 2021-01-01 | Barber | 11 | Active |
| 2021-02-01 | Barber | 11 | Suspended |
| 2021-03-01 | Barber | 11 | Active |
| 2021-04-01 | Barber | 11 | Active |
我想要一个查询来返回这个结果集
| Date | Job_Id | Employee_ID | Status |
|---|---|---|---|
| 2021-03-01 | Teacher | 10 | Retired |
| 2021-04-01 | Teacher | 10 | Active |
| 2021-02-01 | Barber | 11 | Suspended |
| 2021-03-01 | Barber | 11 | Active |
本质上,它应该在状态更改时返回两条最近的记录。 我目前正在尝试使用延迟函数,但我对 SQL 还不是很精通,这就是我卡住的地方。
SELECT Date, Job_ID,Employee_ID, [Status], PrevStatus FROM
(
SELECT
Date,
Job_ID,
Employee_ID,
[Status],
LAG([Status]) OVER (PARTITION BY Job_ID ORDER BY ExtractDate ) AS PrevStatus
FROM #Statuses
) AS a
WHERE a.PrevStatus <> [Status] AND a.PrevStatus IS NOT NULL
有人对如何修改有任何想法吗?
【问题讨论】:
-
不是
BarberEmployee_ID=11? -
这是——对不起,我模拟了数据并犯了一个错误。现已更正。
标签: sql-server tsql sql-server-2012