如何根据 SQL 中的最后一行结果生成预测

How to generate a Forecast based on last row result in SQL

我需要帮助来开发建议的任务:

我需要计算当前月份的活跃员工数,然后生成未来六个月的“预测”,预测只是未来六个月当前月份的最后一个活跃员工总数,只需更改日期值关于结果。

预期结果:

Date_Active Location Total_Active Forecast
2021.04 127 54 No
2021.05 127 54 Yes
2021.04 128 32 No
2021.05 128 32 Yes

到目前为止我只需要计算当前月份

SELECT
CONCAT(YEAR(@Current),'.',MONTH(@Current)) AS Date_Active,
Emp.Location AS Location,
COUNT(Emp.EmpID) AS Total_Active,
CASE WHEN @Current <= @InitialDate THEN 'No' ELSE 'Yes' END AS Forecast
FROM Employees Emp

我尝试使用 while 循环它,但没有成功。

WHILE @Current <= @FinalDate
BEGIN
SELECT
CONCAT(YEAR(@Current),'.',MONTH(@Current)) AS Date_Active,
Emp.Location AS Location,
COUNT(Emp.EmpID) AS Total_Active,
CASE WHEN @Current <= @InitialDate THEN 'No' ELSE 'Yes' END AS Forecast
FROM Employees Emp
INNER JOIN 
SET @Current = DATEADD(MONTH, 1, @Current)
END

假设@Current 是给定月份的第一天,@FinalDay 是给定月份加六,@InitialDate 是给定日期。

第一次来这里,如有错误请见谅。

由于原始数据非常庞大,因此使用虚构数据进行简化。

编辑: 我正在使用 SQL Server 2016。

您可以使用 cross apply:

select dateadd(month, v,n, t.date_active), location, 
       t.total_active, 1 as is_forecast
from (select t.*,
             max(date_active) over (partition by location) as max_date_active
      from t
     ) t cross apply
     (values (1), (2), (3), (4), (5), (6)) v(n)
where max_date_active = date_active