【发布时间】:2020-09-17 23:20:56
【问题描述】:
我有一个名为 Audits 的表,它有一个 CompanyId、Date、AuditNumber 字段,每个公司可以有许多审计,而 AuditNumber 字段跟踪该公司有多少审计。
我正在尝试将所有 最新 审核记录日期更新为上一个日期 + 5 年,因此假设 CompanyId 12345 有 3 次审核,我想更新第 3 次审核(第 3 次审核是最新的一)记录日期与第二次审计记录日期 + 5 年后的未来等...基本上对所有 最新 记录执行此操作。
到目前为止,我所做的是尝试使用 while 循环来执行此操作,但我很困惑,因为它并没有完全按照我想要的方式执行...
DECLARE @counter INT = 1;
WHILE(@counter <= (SELECT COUNT(*) FROM Audits WHERE AuditNumber > 1)
BEGIN
UPDATE Audits
SET Date = CASE
WHEN AuditNumber > 1 THEN (SELECT TOP 1 DATEADD(YEAR, 5, Date) FROM Audits WHERE AuditNumber < (SELECT(MAX(AuditNumber) FROM Audits))
END
WHERE AuditNumber > 1
SET @counter = @counter + 1
END
我不是 SQL 专家,但这只是将 Date 更新为由于 SELECT TOP(1) 而可以找到的第一个上一个日期,但如果我不放那个 TOP(1),则子查询返回超过1 条记录,因此它会抱怨。
任何帮助将不胜感激。
谢谢!
【问题讨论】:
标签: sql-server tsql stored-procedures sql-update window-functions