和所需的输出是:
输出说明:
如果您看到project_ID 111共有4个Version_id。第一版Id的开始日期是2015年5月8日,version_ID 2的开始日期是2015年12月30日。因此,在我的数据库中,我错过了2个版本之间的月份,因此,我需要显示那些具有以前版本ID的月份,并且需要继续到当前年度的上个月(即2017年12月)
如果您看到输出的图像相同版本ID将在下个月重复,直到该月份没有新的version_id。
请帮我解决这个问题..提前致谢
答案 0 :(得分:0)
此代码工作正常......
我从早上起就在处理问题,但我没有得到任何东西......所以,发布了这个问题......但最后我得到了预期的答案......
这是我的代码
WITH mycte AS
(
SELECT Project_ID ,CONVERT(DATE, Start_Date,102) DateValue, Version_ID
from projects
UNION ALL
SELECT project_id, dateadd(mm, 1, DateValue), Version_ID
FROM mycte
WHERE year(DateValue) <= YEAR(GETDATE())
)
SELECT project_id, month(DateValue), year(datevalue), max(Version_ID) as version_id,
cast(cast(year(DateValue) as varchar(4)) +
RIGHT('0' + CAST(month(DateValue) AS VARCHAR(2)), 2) +
RIGHT('0' + CAST('01' AS VARCHAR(2)), 2) as date) as start_date
FROM mycte
--where project_id = 111
group by project_id, month(DateValue), year(datevalue)
having max(year(datevalue)) <= year(getdate())
OPTION (MAXRECURSION 0)