gpt4 book ai didi

SQL检测行的变化

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

我附加了来自 sql server 的数据:

select * from log

data

我想做的是检查列名称的代码是否有任何更改。因此,如果您从表日志中看到数据,代码将更改 2 次(B02、B03)。

我想做的是每次代码更改时检索第一个更改的行。在此示例中,第一个更改位于红色框内。所以我想要第 5 行和第 9 行的结果。

我试过像下面的代码那样使用分区:

select a.name,a.code from(
select name,code,row_number() over(partition by code order by name) as rank from log)a
where a.rank=1

然后得到这样的结果。

result

但是,我不想检索第一行。因为它是第一个值,所以我不需要它。所以我只想检索列代码指示的更改。如果您知道该怎么做,请提供帮助。

请注意,我无法使用过滤器 where code <> 'B01' 编写查询,因为在这种情况下,我不知道第一个值是什么。

请假设第一个值是第一个插入到表中的数据。

最佳答案

使用 lag 获取前一行的值(假设 id 指定顺序)并获取与当前行值不同的行。

create table #log (id int identity(1,1) not null, name nvarchar(100), code nvarchar(100));

insert into #log(name,code) values ('SARUMA','B01'), ('SARUMA','B01'), ('SARUMA','B01'), ('SARUMA','B01');
insert into #log(name,code) values ('SARUMA','B02'), ('SARUMA','B02'), ('SARUMA','B02'), ('SARUMA','B02');
insert into #log(name,code) values ('SARUMA','B03'), ('SARUMA','B03');

select name
,code
from (
select l.*
,lag(code) over (
partition by name order by id
) as prev_code
from #log l
) l
where prev_code <> code

关于SQL检测行的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117466/

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