MySQL填写给定状态的两个日期之间缺少日期

Ric*_*ltz 5 mysql date

我有一个项目数据集.项目从头到尾更改状态,状态更改的日期记录在表中(表名为"events" - 不是我的选择).看起来像这样(简化):

Date        Status
2015-06-01  Start
2015-06-03  Stage 2
2015-06-07  Stage 3
Run Code Online (Sandbox Code Playgroud)

在任何给定的日期范围内(动态确定),我希望能够看到哪些项目处于哪种状态.但是,对数据使用BETWEEN或其他查询只会提取那些在此期间状态发生变化的项目,而不是那些仍处于给定状态的项目.

我目前在Excel中创建了一个非常笨重的解决方案,它将行复制到状态更改日期之间的新行中,如下所示:

Date          Status  
2015-06-01    Project start
2015-06-02    Project start (copied)
2015-06-03    Stage 2 
2015-06-04    Stage 2 (copied)
2015-06-05    Stage 2 (copied)
2015-06-06    Stage 2 (copied)
2015-06-07    Stage 3
Run Code Online (Sandbox Code Playgroud)

此解决方案允许我在2015-06-06上查询项目的状态,并查看它仍处于第2阶段.

有什么方法可以使用mySql来提取相同的数据,但作为输出查询?我听说有人建议使用Calendar表,但我不确定它是如何工作的.我也看到有人推荐一个Cross Join,但是再一次,我从描述中无法理解它是如何工作的.

在此先感谢您的帮助!

pan*_*018 0

您不需要创建包含所有日期的表。您可以更改表格以给出每个状态的开始日期和结束日期,并使用 Between 语句。

或使用您现有的数据。

使用 @datequery 作为您想要查找其状态的日期。

Select top 1 Status from Events
where Date <= @datequery and Date 
order by Date desc
Run Code Online (Sandbox Code Playgroud)

返回您查询日期之前的最新状态更改。

@datequery = 2015-06-06

Status
Stage 2
Run Code Online (Sandbox Code Playgroud)