查找与原始记录相比较年份日期的参考记录

时间:2014-07-01 12:12:53

标签: sql sql-server sql-server-2005

有人可以帮助我使用sql。

我有一个包含字段的表:

ID(guid),DocumentNumber(varchar),RefDocumentNumber(varchar),DocumentDate(datetime)。

文档已配对,意思是:

(原始文件)

  • ID:1111-111 ......
  • DocumentNumber:1
  • RefDocumentNumber:空字符串
  • 日期:2014-06-25 12:11:24.890

(参考文件)

  • ID:2222-2222
  • DocumentNumber:2
  • RefDocumentNumber:1
  • 日期:2014-06-25 12:12:24.890

问题是我有一些情况,参考文件有更年轻的日期"。所以我需要用DATEADD函数更新它的日期(加60秒)。

这是由于服务器时间错误而发生的......

有人可以帮助我:

  1. 查找此记录(我想知道需要更新的参考文档数量)
  2. 帮助我"安全"更新此引用文档(实际上是UPDATE MyTable SET documentdate = DATEADD(ss,60,documentdate)的循环,其中documentnumber =' 1'
  3. 感谢。

2 个答案:

答案 0 :(得分:2)

这样的事情:

UPDATE OD SET OD.Date = RD.Date
FROM Dokument OD
JOIN Dokument RD ON OD.DocumentNumber = RD.RefDocumentNumber
WHERE OD.Date < RD.Date

或:

UPDATE OD SET OD.Date = DATEADD(second,-120,OD.Date)
FROM Dokument OD
JOIN Dokument RD ON OD.DocumentNumber = RD.RefDocumentNumber
WHERE OD.Date < RD.Date

只有select语句:

Select DISTINCT OD.Id
FROM Dokument OD
JOIN Dokument RD ON OD.DocumentNumber = RD.RefDocumentNumber
WHERE OD.Date < RD.Date

答案 1 :(得分:1)

您可以使用游标迭代所有记录:

DECLARE curYoungRecords CURSOR FOR
 SELECT a.Id, a.DocumentDate
   FROM Documents a
        INNER JOIN Documents b ON b.DocumentNumber = a.RefDocumentNumber
               AND b.DocumentDate < a.DocumentDate

DECLARE @DocId UNIQUEIDENTIFIER
DECLARE @DocDate DATETIME

OPEN curYoungRecords
FETCH NEXT FROM curYoungRecords INTO @DocId, @DocDate

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Make record "older" by 120 seconds
    UPDATE Documents
       SET DocumentDate = DATEADD(second, -120, @DocDate)
     WHERE Id = @DocId

    FETCH NEXT FROM curYoungRecords INTO @DocId, @DocDate
END

CLOSE curYoungRecords
DEALLOCATE curYoungRecords

INNER JOIN只确保&#34;孩子&#34;包含文件日期比父母年轻的文件。