我有一个项目数据集.项目从头到尾更改状态,状态更改的日期记录在表中(表名为"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,但是再一次,我从描述中无法理解它是如何工作的.
在此先感谢您的帮助!
您不需要创建包含所有日期的表。您可以更改表格以给出每个状态的开始日期和结束日期,并使用 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)