查找在创建新记录后的小时时间范围内更新的记录

时间:2016-09-06 17:48:58

标签: sql-server tsql time

我们说我有为用户创建的每个条目创建的记录。我们会称这些文件为准。他们有一个 CreatedWhen 列。

我们还说明可以更新文档以更改其时间戳。一个名为 UpdatedOn 的列。

UpdatedOn 列的初始时间戳与创建新文档的CreatedOn相同,除非他们在退出前保存它。

现在,有人想知道在创建新文档前2小时更新了哪些文档。

这是我的尝试,我无法弄清楚它为什么不起作用。

编辑:我回来的时间不正确。

SELECT
    CASE WHEN (d2.UpdatedOn IS NOT NULL)
         THEN ROW_NUMBER() OVER (partition by d2.DocumentID, d2.DocumentName, d2.CreatedWhen --sequence grouping
                                     order by d2.UpdatedOn desc) --get earliest dates
         ELSE 0
    END as SeqNum,
    d.DocumentName,
    d.CreatedWhen
    d2.DocumentName as [DocUpdatedWithin2HR],
    d2.UpdatedOn
Into #temp
FROM Documents d
JOIN Documents d2 ON d.DocumentID = d2.DocumentID
WHERE d2.UpdatedOn BETWEEN DATEADD(Hour,-2,d.CreatedWhen) --2 hours prior, 1 hour window
                      AND DATEADD(Second,-1,(DATEADD(Hour,-1,d.CreatedWhen))) --1 second shy of an hour

select distinct
    DocumentName,
    CreatedWhen,
    DocUpdatedWithin2HR, --xml path this column later
    UpdatedOn
from #temp where rn = 1 order by 1,3

1 个答案:

答案 0 :(得分:0)

JOIN需要DocumentID。我很惊讶你没有得到语法错误。将JOIN更新为JOIN Documents d2 ON d.DocumentID = d2.DocumentID