我确定这是一个简单的问题,但是由于某种原因,我得到的结果确实很奇怪。就像数据样本一样(数据集要复杂得多,但这是背后的逻辑):
+-----+--------+-----------+----------+
| Key | Name | StartDate | EndDate |
+-----+--------+-----------+----------+
| 1 | Name1 | 20180101 | 20180801 |
| 2 | Name2 | 20180801 | 20181205 |
| 3 | Name3 | 20181205 | NULL |
+-----+--------+-----------+----------+
现在在20180812上,我想知道谁在活动,所以我说:
SELECT * FROM Table WHERE 20180812 BETWEEN StartDate AND EndDate
这里的逻辑给了我一个看似巨大的交叉连接,将我的6000个数据集转化为数百万的回报。
我在这种逻辑上根本做错了吗?
------更新-------
我似乎需要提供一些有关日期如何连接到数据表的信息。
因此,对于StartDate(INT)和EndDate(INT)中的每一个,都是链接到日期维度的键。
只是为了澄清查询,实际上看起来像这样。
SELECT
*
FROM Table T1
LEFT JOIN Dimension.[Date] [StartDate] ON T1.StartDate = [StartDate].DateKey
LEFT JOIN Dimension.[Date] [EndDate] ON T1.EndDate = [EndDate].DateKey
WHERE '2018-11-01' BETWEEN [StartDate].FullDateAlternateKey AND [EndDate].FullDateAlternateKey
FullDateAlternateKey是DATE