Извадете твърдо кодирания период от време от заявката си. Запишете изхода (като вашия пример в края) във временна таблица (нарекох го #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) дни и днес. Всяка дата с данни е достъпна за списък с дати, това е ключът към вашия въпрос. Можех да напиша условието за присъединяване като
list.dtadmission between DATEADD(DD,-6,data.dtadmission) and data.dtadmission
Но това, което наистина се случи, беше, че го тествах като
list.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
Което не връща записи, защото синтаксисът е „Между НИСКО и ВИСОКО“. Прегледах с facepalm 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'
Вижте как датата на списъка е между datadate и dataplus6 във всички записи?