gpt4 book ai didi

SQL:根据交替值删除额外的行

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

我有一个表,其中包含用户字段的状态,值是 0 或 1。由于几年前创建的编码错误,无论值是否实际更改,都会添加一个新条目。该表具有条目创建时间的 DateModified 列。

我想要做的是将表格缩减为仅交替(振荡?)值,最早的新值是每次都保留的行。一个例子将使这一点更清楚:

表格当前的样子:

    DateMod  Value
6:05 pm 0
6:01 pm 0
5:47 pm 0
5:33 pm 1
5:15 pm 1
4:07 pm 0
3:58 pm 1
2:23 pm 0

表格应该是这样的:

    DateMod   Value
5:47 pm 0
5:15 pm 1
4:07 pm 0
3:58 pm 1
2:23 pm 0

希望这是有道理的。这一定是可能的,对吧?

最佳答案

这将在 SQL Server 2008 中工作。我使用 time 作为 DateMod 的数据类型,但是如果你使用 datetime 则它是相同的.可以从 SQL Server 2005 使用 Common Table Express 和 row_number。

-- Sample table
declare @T table(DateMod time, Value bit)
insert into @T values
('6:05 pm', 0),
('6:01 pm', 0),
('5:47 pm', 0),
('5:33 pm', 1),
('5:15 pm', 1),
('4:07 pm', 0),
('3:58 pm', 1),
('2:23 pm', 0)

-- Delete using row_number and cte
;with cte as
(
select *,
row_number() over(order by DateMod) as rn
from @T
)
delete C2
from cte as C1
inner join cte as C2
on C1.rn+1 = C2.rn and
C1.Value = C2.Value

-- Result
select *
from @T

结果:

DateMod          Value
---------------- -----
17:47:00.0000000 0
17:15:00.0000000 1
16:07:00.0000000 0
15:58:00.0000000 1
14:23:00.0000000 0

关于SQL:根据交替值删除额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601280/

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