我在SQL中有一个表,我希望更新结束日期,该日期应该是下一行开始日期的减去一天。另外一个条件是该行应与同一个员工的“相同资源”相同。
例如,在上面的项目点火表中,第一个记录的结束日期应该是第二个记录的开始日期的减去一天。对于另一个项目也是如此。 我已经尝试了自己的连接,因为我想比较同一个表的两行,但它不适用于我的确切结果: - (
答案 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