select
StaffId,
BranchId,
MIN(StartTime),
MAX(EndTime),
PatientId
from
(
select *,
ROW_NUMBER() over (order by starttime)
- ROW_NUMBER() over (partition by isnull(PatientID,-1) order by starttime) rn
from @results
) v
group by staffid, branchid, patientid, rn
order by MIN (starttime)
मुझे यकीन नहीं है कि @results तालिका में StaffID और BranchID भिन्न हो सकते हैं, इसलिए यदि वे कर सकते हैं तो आपको इसमें बदलाव करने की आवश्यकता हो सकती है।