如何根据 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
我需要帮助来开发建议的任务:
我需要计算当前月份的活跃员工数,然后生成未来六个月的“预测”,预测只是未来六个月当前月份的最后一个活跃员工总数,只需更改日期值关于结果。
预期结果:
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