通过比较同一项目的下一个开始日期,显示结束日期减去一天

时间:2015-08-05 06:35:32

标签: sql-server

我在SQL中有一个表,我希望更新结束日期,该日期应该是下一行开始日期的减去一天。另外一个条件是该行应与同一个员工的“相同资源”相同。

enter image description here

例如,在上面的项目点火表中,第一个记录的结束日期应该是第二个记录的开始日期的减去一天。对于另一个项目也是如此。 我已经尝试了自己的连接,因为我想比较同一个表的两行,但它不适用于我的确切结果: - (

2 个答案:

答案 0 :(得分:0)

我认为您可以使用LEAD这样的功能:

UPDATE yourTable
SET EXPECTEDENDDATE = ISNULL(DATEADD(DAY, 1, 
    LEAD(EXPECTEDSTARETDATE) OVER (PARTITION BY ProjectName 
                                   ORDER BY EXPECTEDSTARETDATE), EXPECTEDSTARETDATE);

答案 1 :(得分:0)

这里我把逻辑如何实现它,请根据你的需要自定义它希望这会对你有所帮助

declare @temp table
(name nvarchar(44),
startdate date,
enddate date
)

insert into @temp values ('one', '2015-07-01', '2015-07-31')
insert into @temp values ('one', '2015-01-16', '2015-12-31')
insert into @temp values ('two', '2015-07-01', '2015-07-31')
insert into @temp values ('two', '2015-07-01', '2015-11-30')

;WITH CTE AS (
SELECT
rownum = ROW_NUMBER() OVER (ORDER BY p.name),
p.name,
p.startdate,
p.enddate
FROM @temp p
)

SELECT CTE.name,
--CTE.startdate,CTE.enddate,
--prev.enddate PreviousValue,
--nex.enddate NextValue,
DATEDIFF(day,CTE.enddate,nex.enddate) diff
FROM CTE
LEFT JOIN CTE prev ON prev.rownum = CTE.rownum - 1
LEFT JOIN CTE nex ON nex.rownum = CTE.rownum + 1