हार्डकोडेड दिनांक सीमा को अपनी क्वेरी से बाहर निकालें। एक अस्थायी तालिका में आउटपुट (जैसे अंत में आपका नमूना) लिखें (मैंने इसे #visits कहा है)।
इसे स्वयं अस्थायी तालिका में शामिल करने का प्रयास करें:
Select list.dtadmission
, AVG(data.nvisits) as Avg
, SUM(data.nvisits) as sum
, COUNT(data.nvisits) as RollingDayCount
, MIN(data.dtadmission) as Verifymindate
, MAX(data.dtadmission) as Verifymaxdate
from #visits as list
inner join #visits as data
on list.dtadmission between data.dtadmission and DATEADD(DD,6,data.dtadmission) group by list.dtadmission
संपादित करें: आपके प्रश्न के उत्तर में यह कहने के लिए मेरे पास टिप्पणियों में पर्याप्त जगह नहीं थी:
मेरा शामिल होना "थोड़े कार्टेशियन" है क्योंकि यह शामिल होने में बाधा के बीच का उपयोग करता है। सूची में प्रत्येक रिकॉर्ड हर दूसरे रिकॉर्ड के खिलाफ जा रहा है, और फिर मैं उन लोगों को चाहता हूं जहां मैं रिपोर्ट करने की तारीख (-7) दिनों और आज की निचली सीमा के बीच हूं। प्रत्येक डेटा दिनांक सूची दिनांक के लिए उपलब्ध है, यह आपके प्रश्न की कुंजी है। मैं शामिल होने की शर्त को
. के रूप में लिख सकता था DATEADD(DD,-6,data.dtadmission) और data.dtadmission के बीचlist.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
लेकिन वास्तव में क्या हुआ था मैंने इसका परीक्षण
. के रूप में किया था DATEADD(DD,6,data.dtadmission) और data.dtadmission के बीचlist.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
जो कोई रिकॉर्ड नहीं देता है क्योंकि वाक्यविन्यास "कम और उच्च के बीच" है। मैंने 0 रिकॉर्ड्स का सामना किया और तर्कों की अदला-बदली की, बस।
निम्नलिखित का प्रयास करें, देखें कि मेरा क्या मतलब है:यह सिर्फ एक सूची के लिए कार्टेशियन शामिल है:
SELECT
list.[dtAdmission] as listdate
,data.[dtAdmission] as datadate
,data.nVisits as datadata
,DATEADD(dd,6,list.dtadmission) as listplus6
,DATEADD(dd,6,data.dtAdmission ) as datapplus6
from [sandbox].[dbo].[admAvg] as list inner join [sandbox].[dbo].[admAvg] as data
on
1=1
where list.dtAdmission = '5-Jan-2011'
इसकी तुलना वास्तविक जॉइन कंडीशन से करें
SELECT
list.[dtAdmission] as listdate
,data.[dtAdmission] as datadate
,data.nVisits as datadata
,DATEADD(dd,6,list.dtadmission) as listplus6
,DATEADD(dd,6,data.dtAdmission ) as datapplus6
from [sandbox].[dbo].[admAvg] as list inner join [sandbox].[dbo].[admAvg] as data
on
list.dtadmission between data.dtadmission and DATEADD(DD,6,data.dtadmission)
where list.dtAdmission = '5-Jan-2011'
सभी अभिलेखों में देखें कि डेटाडेट और डेटाप्लस 6 के बीच सूची की तारीख कैसी है?