获取记录-日期是否在日期范围内

时间:2019-02-08 00:38:48

标签: sql-server tsql

我确定这是一个简单的问题,但是由于某种原因,我得到的结果确实很奇怪。就像数据样本一样(数据集要复杂得多,但这是背后的逻辑):

+-----+--------+-----------+----------+
| 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

0 个答案:

没有答案