Keluarkan rentang tanggal hardcode dari kueri Anda. Tulis output (seperti contoh Anda di akhir) ke tabel temp (saya menyebutnya #kunjungan di bawah).
Coba gabungkan sendiri ke tabel temp:
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
EDIT: Saya tidak memiliki cukup ruang di Komentar untuk mengatakan ini sebagai tanggapan atas pertanyaan Anda:
Gabung saya adalah "agak cartesian" karena menggunakan batasan antara dalam gabung. Setiap catatan dalam daftar akan naik melawan setiap catatan lainnya, dan kemudian saya ingin yang tanggal saya laporkan berada di antara batas bawah (-7) hari dan hari ini. Setiap tanggal data tersedia untuk mencantumkan tanggal, ini adalah kunci pertanyaan Anda. Saya bisa menulis kondisi bergabung sebagai
list.dtadmission between DATEADD(DD,-6,data.dtadmission) and data.dtadmission
Tapi yang sebenarnya terjadi adalah saya mengujinya sebagai
list.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
Yang tidak mengembalikan catatan karena sintaksnya adalah "Antara RENDAH dan TINGGI". Saya melakukan facepalmed pada 0 catatan dan menukar argumen, itu saja.
Coba yang berikut ini, lihat apa yang saya maksud:Ini adalah cartesian join hanya untuk satu tanggal daftar:
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'
Bandingkan ini dengan kondisi join yang sebenarnya
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'
Lihat bagaimana daftar tanggal antara datadate dan dataplus6 di semua catatan?