【发布时间】:2019-01-08 05:19:56
【问题描述】:
输入
date | username | program | workflow | Pending_Audits |Audits_Carry_Forward
31-07-2018 | ram | Pre pay | Sisi | -1 | -12
27-07-2018 | ram | Pre pay | Sisi | -111 | 0
25-07-2018 | ram | Pre pay | Sisi | -16 | -14
我有上面的表格,我正在编写一段时间条件以从给定日期更新 Audits_Carry_Forward 列。
逻辑是将给定日期的 audits_carry_forward 更新到下一行 pending_audits 列,该列与给定日期具有相同的程序和工作流
期望的输出:
date | username | program | workflow | Pending_Audits |Audits_Carry_Forward
31-07-2018 | ram | Pre pay | Sisi | -1 | -111
27-07-2018 | ram | Pre pay | Sisi | -111 | -16
25-07-2018 | ram | Pre pay | Sisi | -16 | -14
所以在这种情况下,我想将“25-07-2018”的 Pending_audits 数据更新为给定日期之上的 audits_carry_forward。
我试过的sql逻辑
DECLARE @date DATE = '2018-07-25'
DECLARE @username VARCHAR(100)= 'ram'
DECLARE @program VARCHAR(100)= 'Pre pay'
DECLARE @workflow VARCHAR(100)= 'Sisi'
DECLARE @a INT
WHILE ( @date <= Cast(Getdate() AS DATE) )
BEGIN
SET @a = (SELECT Count(*)
FROM dbo.homehealthpp1
WHERE username = @username
AND program = @program
AND workflow = @workflow
AND date = @date)
IF ( @a = 1 )
BEGIN
UPDATE dbo.homehealthpp1
SET audits_carry_forward = (SELECT pending_audits
FROM dbo.homehealthpp1
WHERE username = @username
AND program = @program
AND workflow = @workflow
AND date = @date)
WHERE username = @username
AND program = @program
AND workflow = @workflow
AND date = Cast(Dateadd(d, 1, @date) AS DATE)
END
SET @date = Cast(Dateadd(d, 1, @date) AS DATE)
END
当日期顺序存在时,上述情况有效。但它不适用于像上述情况那样日期不连续的情况。
【问题讨论】:
-
我不明白。我知道最近两个日期是如何更新的,但不是 2018-07-25。
-
@GordonLinoff 关于插入数据的“2018-07-25”。从该数据我想更新下一个最近的日期数据。
标签: sql sql-server-2008 while-loop