【发布时间】:2018-02-17 10:31:24
【问题描述】:
我有来自 sql server 的数据:
select * from log
我想做的是检查列名的代码是否有任何更改。因此,如果您从表日志中查看数据,则代码更改了 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
并得到这样的结果。
但是,我不希望检索第一行。因为它是第一个值,我不需要它。所以我只想检索列代码指示的更改。如果你知道怎么做,请帮忙。
请注意,我不能使用过滤器where code <> 'B01' 编写查询,因为在这种情况下,我不知道第一个值是什么。
请假设第一个值是最先插入到表中的数据。
【问题讨论】:
-
你可以用哪一栏来表示顺序?根据您发布的内容,无法确定顺序。
-
如果您发布示例数据的文本而不是图像,您会做得更好。
标签: sql sql-server partition