当您只能访问开始日期和结束日期时,每月查询 table 的活动元素

Querying the active elements of a table per month when you only have access to Start and End Dates

为了编制报告,我目前必须设计一个查询,该查询需要 table 个项目。 每个项目都有开始日期和结束日期。 我应该设计一个查询,select 是每个月的活动项目。

我现在正在做的是执行 2 Select 语句: 第一个计算完成的项目并按月分组,所以我有一个月内完成的所有项目。

第二个计算所有已开始但至少在 1 个月后才完成的项目。

然后我加入他们的月份和年份,并将 2 个计数相加。

我注意到的问题是,这忽略了既没有结束也没有在那个月内创建的项目,这意味着延伸到它的项目。 示例:一月份创建并在三月份完成的项目将不计入二月份。

有没有办法在不为项目的每个潜在长度创建另一个 select 的情况下做到这一点? 像: 一个 select 计算上个月创建但本月未完成的所有项目,然后计算过去 2 个月创建的项目,依此类推。

根据您的 SQL 方言,像这样的东西应该可以解决问题?

select * from projects p 
where sysdate between p.startDate 
              and coalesce(p.endDate, to_date('2040-12-31', 'yyyy-mm-dd'))

如果我理解正确的话,这样的事情可能会有所帮助。

Select ProjectsStarted = Sum(Case When ProjectStartDate between MonthStart and MonthEnd Then 1 Else 0 End)
,      ProjectsEnded = Sum(Case When ProjectEndDate between MonthStart and MonthEnd Then 1 Else 0 End)
,      ContinuingProjects = Sum(Case When ProjectStartDate < MonthStart AND (ProjectEndDate > MonthEnd OR ProjectEndDate is null) Then 1 Else 0)
From   tblProjects

我最终构建了一个日历 Table,方法是从所有可能的项目开始日期中选择月份和年份,然后使用连接将每个项目附加到它活跃的每个月。