Извлеките жестко закодированный диапазон дат из вашего запроса.Запишите результат (как ваш пример в конце) во временную таблицу (я назвал ее #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
, который не возвращает записей, так как синтаксис «Между LOW и HIGH».Я нанесла на 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 во всех записях?