Elimine el rango de fechas codificado de su consulta. Escriba el resultado (como su muestra al final) en una tabla temporal (lo llamé #visits a continuación).
Pruebe esto mismo únase a la tabla temporal:
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
EDITAR: No tuve suficiente espacio en Comentarios para decir esto en respuesta a su pregunta:
Mi unión es "un poco cartesiana" porque usa un entre en la restricción de unión. Cada registro en la lista se compara con todos los demás registros, y luego quiero aquellos en los que la fecha que informo está entre un límite inferior de (-7) días y hoy. Cada fecha de datos está disponible para listar la fecha, esta es la clave de su pregunta. Podría haber escrito la condición de unión como
list.dtadmission between DATEADD(DD,-6,data.dtadmission) and data.dtadmission
Pero lo que realmente sucedió fue que lo probé como
list.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
Lo que no devuelve registros porque la sintaxis es "Entre BAJO y ALTO". Puse mi facepalm en 0 registros e intercambié los argumentos, eso es todo.
Pruebe lo siguiente, vea lo que quiero decir:esta es la unión cartesiana para solo una fecha de lista:
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'
Compare esto con la condición de unión real
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'
¿Ves cómo la fecha de la lista está entre datadate y dataplus6 en todos los registros?