मैं एक दूसरे के 3 दिनों के भीतर तिथियों को समूहबद्ध करने की कोशिश कर रहा हूं और 30 दिनों के भीतर रीडमिशन के आधार पर अंक असाइन कर रहा हूं। एक एमआरएन प्रति पाठ 3 अंक प्राप्त होगा। नीचे मेरी क्वेरी को संशोधित करने में कोई मदद महान होगी।एसक्यूएल: गैप्स और द्वीप समूह, समूहित दिनांक
उदाहरण:
CREATE TABLE #z (
ID INT IDENTITY(1,1),
OrganizationMrn INT,
VisitDate DATE,
CATEGORY VARCHAR(15))
INSERT #z(OrganizationMrn, VisitDate, CATEGORY)
VALUES
(1, '1/2/2016','Inpatient'),
(1, '1/5/2016','Inpatient'),
(1, '1/7/2016','Inpatient'),
(1, '1/8/2016','Inpatient'),
(1, '1/9/2016','Inpatient'),
(1, '2/4/2016','Inpatient'),
(1, '6/2/2016','Inpatient'),
(1, '6/3/2016','Inpatient'),
(1, '6/5/2016','Inpatient'),
(1, '6/6/2016','Inpatient'),
(1, '6/8/2016','Inpatient'),
(1, '7/1/2016','Inpatient'),
(1, '8/1/2016','Inpatient'),
(1, '8/4/2016','Inpatient'),
(1, '8/15/2016','Inpatient'),
(1, '8/18/2016','Inpatient'),
(1, '8/28/2016','Inpatient'),
(1, '10/12/2016','Inpatient'),
(1, '10/15/2016','Inpatient'),
(1, '11/17/2016','Inpatient'),
(1, '12/20/2016','Inpatient')
वांछित आउटपुट: मैं वास्तव में केवल वास्तविक विज़िट, OrganizationMrn, और अंक की जरूरत है। (जब तारीखों को समूहीकृत किया जाता है (वास्तविक विज़िट), पहली तारीख 30 दिनों के भीतर रीडमिशन के लिए उपयोग की जानी चाहिए)।
ACTUAL Visits Grouped Dates Re-admissions Points
1/2/2016 (grouped 1/2, 1/5)
1/7/2016 (grouped 1/7, 1/8, 1/9) Readmit from 1/2 (3 points)
2/4/2016 Readmit from 1/7 (3 points)
6/2/2016 (grouped 6/2, 6/3, 6/5)
6/6/2016 (grouped 6/6, 6/8) Readmit from 6/2 (3 points)
7/1/2016 Readmit from 6/6 (3 points)
8/1/2016 (grouped 8/1, 8/4)
8/15/2016 (grouped 8/15, 8/18) Readmit from 8/1 (3 points)
8/28/2016 Readmit from 8/15 (3 points)
10/12/2016 (grouped 10/12, 10/15)
11/17/2016
12/20/2016
___________________________________________ 6 total readmits (18 total points)
क्वेरी के नीचे एक दूसरे के 3 दिन के भीतर समूह दिनों के लिए अंतराल और द्वीपों का उपयोग करता है। हालांकि यदि तिथियां लगातार होती हैं, तो प्रारंभ/समाप्ति तिथियां समूहबद्ध होती हैं। (उदाहरण: समूह के नीचे क्वेरी, [1/2, 1/5, 1/7 /, 1/8, 1/9] एक पंक्ति में; तिथियों को दो पंक्तियों में विभाजित किया जाना चाहिए [1/2, 1/5] और [1/7 /, 1/8, 1/9])।
समूहबद्ध तिथियों में व्यक्तिगत पंक्तियां होने के बाद मुझे 30 दिनों के भीतर प्रत्येक रीडमिशन को 3 अंक असाइन करने की आवश्यकता होती है। (संगठन के प्रति वास्तविक यात्रा एक दूसरे के 30 दिनों के भीतर)। ऊपर वांछित आउटपुट अनुभाग वर्णन करता है कि मेरे उदाहरण की तिथियों को कैसे समूहीकृत किया जाना चाहिए।
;WITH StartingPoints AS (
SELECT OrganizationMrn, VisitDate, ROW_NUMBER() OVER (ORDER BY VisitDate) AS Sequence FROM #z AS A
WHERE a.category = 'Inpatient' AND NOT EXISTS (
SELECT * FROM #z AS B
WHERE B.OrganizationMrn = A.OrganizationMrn AND
B.VisitDate >= DATEADD(DAY, -4, A.VisitDate) AND
B.VisitDate < A.VisitDate AND
B.Category = 'Inpatient' ) ),
EndingPoints AS (
SELECT OrganizationMrn, VisitDate, ROW_NUMBER() OVER (ORDER BY VisitDate) AS Sequence FROM #z AS A
WHERE a.category = 'Inpatient' AND NOT EXISTS (
SELECT * FROM #z AS B
WHERE B.OrganizationMrn = A.OrganizationMrn AND
B.VisitDate <= DATEADD(DAY, 4, A.VisitDate) AND
B.VisitDate > A.VisitDate AND
B.Category = 'Inpatient' ) )
SELECT S.OrganizationMrn, S.VisitDate AS StartDate, E.VisitDate AS EndDate, CEILING((DATEDIFF(DAY, S.VisitDate, E.VisitDate) + 1)/4.0) AS Points
FROM StartingPoints AS S
JOIN EndingPoints AS E ON (E.Sequence = S.Sequence)
ORDER BY S.OrganizationMrn DESC
1/7 के साथ 1/5 समूह क्यों नहीं है? –
या 6/6 के साथ 6/5? –
1/5 को 1/7 के साथ समूहीकृत नहीं किया गया है क्योंकि 1/2 1/5 के लिए वास्तविक यात्रा है (समूह में पहली तारीख वास्तविक विज़िट दिनांक है)। 1/7 1/2 के 3 दिनों के भीतर नहीं है इसलिए 1/7 एक नई यात्रा होगी। क्या इसका कोई मतलब है? – JBritton