gpt4 book ai didi

sql-server - 仅根据一个字段选择与先前记录相比发生更改的记录

转载 作者:行者123 更新时间:2023-12-03 01:42:06 25 4
gpt4 key购买 nike

考虑以下示例数据

| SN |        DateTime       | Status |
|----|-----------------------|--------|
| 1 | '2015-01-01 00:30:00' | OPEN |
| 2 | '2015-01-01 00:35:00' | OPEN |
| 3 | '2015-01-01 00:40:00' | CLOSED |
| 4 | '2015-01-01 00:50:00' | OPEN |
| 5 | '2015-01-01 01:10:00' | OPEN |
| 6 | '2015-01-01 01:15:00' | CLOSED |
| 7 | '2015-01-01 01:20:00' | CLOSED |
| 8 | '2015-01-01 01:30:00' | OPEN |
| 9 | '2015-01-01 01:40:00' | OPEN |
| 10 | '2015-01-01 01:52:00' | OPEN |
| 11 | '2015-01-01 01:55:00' | CLOSED |
| 12 | '2015-01-01 02:15:00' | OPEN |
| 13 | '2015-01-01 02:30:00' | OPEN |

我需要选择“状态”列的值较之前的记录发生更改的记录。应始终返回第一条记录。

我可以使用 SQL Server 中的 For 循环来完成此操作,但我想要一个更好的解决方案。是否可以在单个 SELECT 语句中完成此操作?该查询应返回序列号为 1、3、4、6、8、11 和 12 的行。

最佳答案

您可以使用 LAG 获取之前的 Status 值,然后在外部查询的 WHERE 子句中使用该值来获取您想要的结果想要:

SELECT SN, [DateTime], Status 
FROM (
SELECT SN, [DateTime], Status,
LAG(Status) OVER (ORDER BY [DateTime]) AS prevStatus
FROM mytable ) t
WHERE COALESCE(prevStatus, '') <> Status

Demo here

关于sql-server - 仅根据一个字段选择与先前记录相比发生更改的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474169/

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