我用两种不同的方法解决了一个问题,但我想知道人们对这些选择有什么想法,以及他们是否还有其他选择。。。
系统正在处理数据的“间隔”。
-
-
间隔由事实表中的“interval\u start”日期时间表示
-
Dimension表包含“间隔”的持续时间(对于不同的实体可以不同)
-
维度表中还有一个“模式”标志
SQL查询中需要以下规则。。。
如果事实表中有记录条目,则可以对其进行处理。
(没有限制。)
模式1
只有在“interval_start”为过去时,记录才对处理有效。
模式2
(已完成的时间间隔。)
为此创建的第一个WHERE子句如下所示。。。
WHERE
getDate() >=
CASE [table].mode
WHEN 0 THEN 0
WHEN 1 THEN [log].interval_start
WHEN 2 THEN [log].interval_start + [table].interval_period
ELSE NULL
END
有人担心这会妨碍索引优化该子句。另一种选择是使用多个和/或条件。
WHERE
([table].mode = 0 AND getDate() >= 0)
OR ([table].mode = 1 AND getDate() >= [log].interval_start)
OR ([table].mode = 2 AND getDate() >= [log].interval_start + [table].interval_period)
干杯