如何比较上一行的日期和更新SQL Server中的条目

利维·安卡(Liviu Anca)

我一直在努力,试图通过比较前几行的日期来找到更新某些条目的方法。

这是我愿意更新的表中存储的日期的示例:

ContractId  PartnerId   DocumentState   DealsDate   ActualCloseDate
-------------------------------------------------------------------
119577922   1450216     38              2016-04-21  2017-08-01
222138372   1450216     38              2017-11-22  2019-04-01
223328932   1450216     38              2018-07-30  2018-11-19
224263667   1450216     38              2019-01-15  2019-04-19
225286013   1450216     38              2019-06-21  2019-07-19
225704493   1450216     38              2019-08-30  2019-12-11

目的是将DocumentState所有ContractIdsActualCloseDate之前的所有项大于的36更改为36 DealsDate

输出应如下所示:

ContractId  PartnerId   DocumentState   DealsDate   ActualCloseDate
-------------------------------------------------------------------     
119577922   1450216     38              2016-04-21  2017-08-01
222138372   1450216     38              2017-11-22  2019-04-01
223328932   1450216     36              2018-07-30  2018-11-19
224263667   1450216     36              2019-01-15  2019-04-19
225286013   1450216     38              2019-06-21  2019-07-19
225704493   1450216     38              2019-08-30  2019-12-11

以下是用于将数据插入临时表的代码。

create table #Test 
(
     ContractId int, 
     PartnerId int, 
     DocumentState int, 
     DeasDate datetime, 
     ActualCloseDate datetime
)

insert into #Test (ContractId, PartnerId, DocumentState, DealsDate, ActualCloseDate) values (119577922, 1450216, 38, '2016-04-21', 2017-08-01')
insert into #Test (ContractId, PartnerId, DocumentState, DealsDate, ActualCloseDate) values (222138372, 1450216, 38, '2017-11-22', 2019-04-01')
insert into #Test (ContractId, PartnerId, DocumentState, DealsDate, ActualCloseDate) values (223328932, 1450216, 38, '2018-07-30', 2018-11-19')
insert into #Test (ContractId, PartnerId, DocumentState, DealsDate, ActualCloseDate) values (224263667, 1450216, 38, '2019-01-15', 2019-04-19')
insert into #Test (ContractId, PartnerId, DocumentState, DealsDate, ActualCloseDate) values (225286013, 1450216, 38, '2019-06-21', 2019-07-19')
insert into #Test (ContractId, PartnerId, DocumentState, DealsDate, ActualCloseDate) values (225704493, 1450216, 38, '2019-08-30', 2019-12-11')

提前致谢!

干杯,

戈登·利诺夫

我认为可更新的CTE可以满足您的需求:

with toupdate as (
      select t.*,
             max(ActualCloseDate) over (partition by PartnerId
                                        order by dealsDate
                                        rows between unbounded preceding and 1 preceding
                                       ) as prev_max_acd
      from #test t
     )
update toupdate
     set documentstate = 36
     where prev_max_acd > dealsdate;

是一个db <>小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较当前行与 SQL Server 中的上一行

如何计算 SQL Server 中具有重复条目的每一行?

组SQL Server中的最新条目

VBScript和SQL Server 2005将当前行与上一行进行比较

如何比较Google Bigquery中的上一行和当前行?

如何找到日期时间值在数据框中的上一行和下一行?

sql代码比较系列中的上一行

无法在SQL Server 2008中获得正确的上一行和下一行

如何比较CSV中的上一行与上一行?

如何将Pandas DataFrame中的值与上一行和上一列中的值进行比较?

比较SQL Server中的第一行和第n行

如何在SQL中按特定列和每个日期选择唯一行?

SQL Server中的UNION如何将一行与另一行进行比较?

同一行中的 SQL Server 比较

比较mysql中的上一行

从SQL Server查询中删除列的重复条目

在SQL Server中对条目和数据透视表进行计数

如何在SQL中获取前一行日期?

SQL Server:获取一行的相反条目

SQL Server:当在表a中更新一行时,如何更新表b?

是否可以从SQL Server启动Active Directory中的新条目或更新Active Directory中的现有条目?

SSMS SQL-将表中的一行与上一行进行比较-状态更改

SQL Server:如何获取上一年的数据并在输出中创建一行

更新SQL Server中的另一行值

如何从BigQuery中的每一行获取上一行和下一行的值?

SQL Server如何只更新数据库中的一行?

如何更新列中具有最大值的一行(SQL Server)

如何在SQL Server Management Studio中编辑多个行/数据条目

比较Spark中当前行和上一行的值