使用SQL将离散事件连接到连续时间序列

时间:2014-02-11 17:31:07

标签: sql date ms-access time-series

我有一个离散的事件,我试图加入连续日历。

举个例子,假设我的日期日历如下所示:

日期
1月2014
2月2014
3月2014 ...
2014年12月31日

现在想象一下,您想要在日历中标记一个离散事件,比如销售。在此示例中,销售时间为3月3日至3月3日。

因此输出如下:

日期,Sales_flag
...
2014年3月2日,假 2014年3月3日,TRUE
2014年3月4日,正确 ...
2014年3月7日,TRUE
2014年3月8日,错误

...甚至可以只返回销售中的行将是一个开始,即:

日期
3-MAR-2014
4-MAR-2014
...
7-MAR-2014

到目前为止,我认为我需要在SQL中使用正确的外连接来实现此目的。但是,我不确定如何加入一系列价值观。以下是我到目前为止的情况:

(NB使用Access,因为我们可以使用哪些数据库的公司政策。)

SELECT Sales_Flag
FROM Sales
RIGHT JOIN Calendar
ON Sales.Date = Calendar.[Start Date]
WHERE Calendar.Date BETWEEN Sales.[Start Date] and Sales.[End Date];

然而,我迄今为止的所有尝试都导致我只有一行只有开始日期,我完全理解 - 最终我加入一个单独的值,因此得到一行。

因此,我是在朝着正确的方向前进,还是在完全错误的灌木丛中吠叫?

1 个答案:

答案 0 :(得分:1)

正确的想法...但我不明白为什么你只在开始日期加入桌子。为什么不加入日期范围?

SELECT Sales_Flag
FROM Sales
RIGHT JOIN Calendar
ON Calendar.Date BETWEEN Sales.[Start Date] and Sales.[End Date];

我有点好奇为什么这里的“离散”事件......是闭门销售? :)

where sales.sales_flag is not null

where子句将消除日历中未匹配的所有行。