使用DATEDIFF计算日期键与加入日期查找表

时间:2018-01-10 18:49:48

标签: sql sql-server date

我正在使用一个数据库,我必须提取随时间变化的记录快照。快照表只有开始和结束日期ID列,因此执行此操作的标准方法是在日期查找表上进行连接。

简化示例:

SELECT
            *
FROM
            records
INNER JOIN
            snapshots
        ON  records.RecordID = snapshots.RecordID
INNER JOIN
            dates
        ON  dates.id BETWEEN snapshots.StartDateID AND snapshots.EndDateID
        AND dates.date = '01-01-2018'

我已经遇到过这种情况似乎非常缓慢的情况,但可能是因为有很多快照可以在很长的日期范围内查找。

我知道日期表的ID只是'1900-01-01'的天数。知道这一点,我可以明确地计算出什么是关键。

例如:

SELECT
            *
FROM
            records
INNER JOIN
            snapshots
        ON  records.RecordID = snapshots.RecordID
        AND DATEDIFF(DAY, '1900-01-01', '2018-01-01') BETWEEN snapshots.StartDateID AND snapshots.EndDateID

我发现这确实有效,并且遇到了这种情况似乎表现得更快的情况。

作为一名SQL新手,我不清楚是否有一些陷阱,我没有看到这应该阻止我使用第二种方法。

0 个答案:

没有答案