sql – SCD日期对的最佳实践(结束/打开时间戳)

在实现时间日期时间对时,这是更好的方法吗?

方法1

_RK   FROM_DTTM              TO_DTTM 
1     01-JAN-2012 00:00:00   31-DEC-2012 23:59:59 ------------> Old record closed out 
1     01-JAN-2013 00:00:00   31-DEC-4949 23:59:59 ------------> New active record

与filter子句一起使用如下:

 where FROM_DTTM <= &FILTER_DATE <= TO_DTTM

方法2

_RK   FROM_DTTM              TO_DTTM 
1     01-JAN-2012 00:00:00   01-JAN-2013 00:00:00 ------------> Old record closed out 
1     01-JAN-2013 00:00:00   31-DEC-4949 23:59:59 ------------> New active record

与filter子句一起使用如下:

 where FROM_DTTM <= &FILTER_DATE < TO_DTTM

注意事项:

方法1与BETWEEN子句语法(包含范围)兼容.出于这个原因,我认为这是最好的方法 – 而且这是我的关注 – 在结束时间戳和开放时间戳之间总会存在差距!例如,以下将(从业务角度不正确)返回任何内容:

 where FROM_DTTM <= '31-DEC-2012 23:59:59.1'dt <= TO_DTTM

不同的数据库在这里具有不同的精度水平.我想必须有标准(在过滤时总是舍入到最接近的秒),但只是想知道是否有任何其他理由支持方法1(例如提议的双时间’AS OF’语法兼容性)?或者确实,方法2是否(以及为什么)更可取.

最佳答案 对于continua(例如日期时间或数值测量),我几乎总是推荐半开区间方法(方法2).正如您所说,方法1往往会产生间隙,或者您需要知道计算终点的精确精度.计算方法2中的终点总是趋于简单.

就我而言,能够使用BETWEEN的“好处”是一个非常小的,与能够快速确保自己查询的正确性相比.

对于非连续数据(没有时间的日期,或离散的数字),我可能会恢复使用闭合间隔.

点赞