Loại bỏ phạm vi ngày được mã hóa cứng ra khỏi truy vấn của bạn. Ghi kết quả đầu ra (như mẫu của bạn ở cuối) vào bảng tạm thời (tôi gọi nó là #visits bên dưới).
Hãy thử tự nối với bảng tạm thời này:
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
CHỈNH SỬA: Tôi không có đủ chỗ trong Nhận xét để trả lời câu hỏi của bạn:
Tham gia của tôi là "kinda cartesian" vì nó sử dụng một giữa trong ràng buộc tham gia. Mỗi bản ghi trong danh sách sẽ so sánh với mọi bản ghi khác, và sau đó tôi muốn những bản ghi mà ngày tôi báo cáo nằm trong giới hạn dưới (-7) ngày và hôm nay. Mỗi ngày dữ liệu đều có sẵn cho ngày niêm yết, đây là chìa khóa cho câu hỏi của bạn. Tôi có thể đã viết điều kiện tham gia là
list.dtadmission between DATEADD(DD,-6,data.dtadmission) and data.dtadmission
Nhưng điều thực sự xảy ra là tôi đã thử nghiệm nó với tư cách là
list.dtadmission between DATEADD(DD,6,data.dtadmission) and data.dtadmission
Không trả về bản ghi nào vì cú pháp là "Giữa THẤP và CAO". Tôi đã đối mặt với 0 bản ghi và hoán đổi các đối số, vậy thôi.
Hãy thử những điều sau, xem ý tôi là gì:Đây là phép nối cacte chỉ cho một ngày danh sách:
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'
So sánh điều này với điều kiện tham gia thực tế
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'
Xem ngày danh sách giữa datadate và dataplus6 trong tất cả các bản ghi như thế nào?