Odstraňte pevně zakódované časové období z dotazu. Zapište výstup (jako váš vzorek na konci) do dočasné tabulky (nazval jsem to níže #visits).
Vyzkoušejte toto vlastní připojení k dočasné tabulce:
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
UPRAVIT: V komentářích jsem neměl dost místa, abych odpověděl na vaši otázku takto:
Moje spojení je „tak trochu karteziánské“, protože používá mezi v omezení spojení. Každý záznam v seznamu se porovnává s každým jiným záznamem a pak chci ty, kde datum, které hlásím, je mezi spodní hranicí (-7) dnů a dneškem. Každé datum je k dispozici k datu seznamu, to je klíč k vaší otázce. Podmínku spojení jsem mohl napsat jako
list.dtadmission between DATEADD(DD,-6,data.dtadmission) and data.dtadmission
Ale ve skutečnosti se stalo to, že jsem to otestoval jako
list.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
Což nevrací žádné záznamy, protože syntaxe je "Mezi NÍZKOU a VYSOKOU". Facepalmoval jsem na 0 záznamech a vyměnil argumenty, to je vše.
Zkuste následující a zjistěte, co tím myslím:Toto je kartézské spojení pouze pro jeden seznam:
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'
Porovnejte to se skutečnou podmínkou připojení
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'
Podívejte se, jak je datum seznamu mezi datadate a dataplus6 ve všech záznamech?