I need the table to go from this:
CalanderDateTime PtID EventDateTime GapinMinutes
2017-09-23 08:34 NULL NULL NULL
2017-09-23 08:35 NULL NULL NULL
2017-09-23 08:36 NULL NULL NULL
2017-09-23 08:37 1 2017-09-23 08:37 1
2017-09-23 08:38 1 2017-09-23 08:38 4
2017-09-23 08:39 NULL NULL NULL
2017-09-23 08:40 NULL NULL NULL
2017-09-23 08:41 NULL NULL NULL
2017-09-23 08:42 NULL NULL NULL
2017-09-23 08:43 1 2017-09-23 08:43 3
2017-09-23 08:44 NULL NULL NULL
2017-09-23 08:45 NULL NULL NULL
2017-09-23 08:46 NULL NULL NULL
to this:
CalanderDateTime PtID EventDateTime GapinMinutes
2017-09-23 08:34 NULL NULL NULL
2017-09-23 08:35 NULL NULL NULL
2017-09-23 08:36 NULL NULL NULL
2017-09-23 08:37 1 2017-09-23 08:37 1
2017-09-23 08:38 1 2017-09-23 08:38 4
2017-09-23 08:43 1 2017-09-23 08:43 3
2017-09-23 08:44 NULL NULL NULL
2017-09-23 08:45 NULL NULL NULL
2017-09-23 08:46 NULL NULL NULL
In this example i would want the next 4 rows removed from the row where 4 is shown in the 'GapinMinutes' column (but this can be any number > 3 and therefore whatever number of rows removed is based on the number shown in the 'GapinMinutes' column, so if the column has a 5, remove the next five rows, if its a 7 remove the next 7 rows, if its a 10, remove the next 10 rows but if its a a number <= 3, keep the next 1,2 or 3 rows…
Here's the script i have so far:
With VentHours (ptID, t, ET, VGM) AS
(
SELECT sig.PatientID, sig.Time,
Case When sig.PatientID = LEAD(sig.PatientID) OVER (ORDER BY sig.PatientID, Sig.Time) AND DateDiff(MINUTE,sig.Time,LEAD(sig.Time) OVER (ORDER BY sig.PatientID, Sig.Time)) between 0 and 720 THEN DateDiff(MINUTE,sig.Time,LEAD(sig.Time) OVER (ORDER BY sig.PatientID, Sig.Time)) ELSE 0 END Vent_Gap_Mins
FROM GCUH_Reporting.dbo.VIEW_GCUH_Vent_Signals sig
inner join GCUH_Archive.dbo.Patients p ON sig.PatientID = p.PatientID
),
JoinTime as
(
Select *
from GCUH_Reporting.dbo.AUX_DateDimension ts
left outer join VentHours vh ON convert(DateTime,ts.DateTime) = convert(DateTime,vh.t)
)
select jt.DateTime, jt.ptid, jt.et, jt.vgm
from JoinTime jt
--where jt.ptID is not null
order by jt.DateTime
Best Answer
This is
Sql server 2008 script
.i think it can be easily translated to other rdbms.Secondly your sample data is wrong.It should be
08:43
instead of 09:43