如何比较上一行的日期和更新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中的另一行值

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

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

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

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

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

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

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

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

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

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

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

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

组SQL Server中的最新条目

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

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

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

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

比较mysql中的上一行

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

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

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

同一行中的 SQL Server 比较

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

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

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

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

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

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