Ето едно начало:
Той получава всяко посещение за всеки UID в реда на admitDT, след което сдвоява всяко посещение със следващото посещение в този резултат. Ако текущата дата на приемане е между последната дата на изписване и 30 дни след нея, изберете я. Все пак има някои странни моменти - показано е, че UID 1 е приет на 12.06.2012 г. и никога не е бил изписан, но след това е приет отново на 20.06.2013 г. и е изписан същия ден.
редактиране:преструктуриран малко, за да се намали броят на присъединяванията
WITH cte AS ( SELECT visitid,uid,dischargedt,admitdt, row_number()over(partition BY uid ORDER BY admitdt) AS r FROM t )SELECTc1.visitid AS v1, c2.visitid AS v2,c1. uid,c1.dischargedt като [Изписан от първо посещение],c2.admitdt като [Приет за следващо посещение]FROM cte c1INNER JOIN cte c2 ON c1.uid=c2.uidWHERE c1.visitid<>c2.visitidAND c1.r+1 =c2.rИ c2.admitdt МЕЖДУ c1.dischargedt И dateadd(d,30,c1.dischargedt )ORDER BY c1.uid
<предварителен код>| V1 | V2 | UID | ИЗПИСАН ОТ ПЪРВОТО ПОСЕЩЕНИЕ | ДОПУСКАНИ ДО СЛЕДВАЩО ПОСЕЩЕНИЕ ||----|----|-----|------ -|-----------------------------|| 25 | 38 | 2 | 11 юни 2013 г. 16:13:00+0000 | 12 юни 2013 г. 10:10:00+0000 || 38 | 12 | 2 | 12 юни 2013 г. 10:10:00+0000 | 17 юни 2013 г. 06:51:00+0000 || 18 | 34 | 3 | 11 юни 2013 г. 12:08:00+0000 | 12 юни 2013 г. 08:40:00+0000 || 21 | 22 | 3 | 12 юни 2013 г. 14:40:00+0000 | 13 юни 2013 г. 10:00:00+0000 || 22 | 16 | 3 | 14 юни 2013 г. 12:00:00+0000 | 19 юни 2013 г. 04:48:00+0000 |