윈도우 이동 평균을 계산하는 함수 (예 : SQLServer 2008)를 만들려고합니다. SQL에 익숙하지 않아서 약간의 어려움을 겪고 있습니다. 이동 평균을 수행하려고하는 데이터는 일별로 그룹화되어야하며 (모든 타임 스탬프가 적용된 데이터 임) 가변적 인 이동 평균 창이 적용되어야합니다.SQL 서버의 윈도우 이동 평균
나는 아래쪽에 표시된 요일 (및 @id)까지 데이터를 그룹화하는 기능을 이미 갖추고 있습니다. 몇 가지 질문이 있습니다 :
이동 평균 기능 내에서 그룹화 기능을 호출하는 것이 좋습니까? 아니면 한 번에 모두 수행해야합니까?
함수에 날짜 입력을위한 이동 평균을 얻을 수 있지만, 반환 된 데이터의 첫 번째 N일가 0이되지 않도록 이동 평균을 시작 N일 돌아 가야 할 가능 그들의 평균은? (즉, 그들이 2011 년 1 월 1 일부터 02-08-2011까지 7 일 이동 평균을 원할 경우 01-01-2011에 이동 평균 계산을 시작하므로 정의한 첫날에 값이 있습니까?)
이동 평균을 수행하는 방법을 조사 중이며 이동 창이 가장 좋은 옵션 인 것 같습니다. (currentSum = prevSum + todayCount - nthDayAgoCount)/nDays하지만 아직 계산 중입니다. 이것의 SQL 구현.
나는 (일부 변수는 가시성을 위해 제거)과 같습니다 그룹화 기능을 가지고 :
이ALL 2010-01-01 1 103
ALL 2010-01-02 1 114
ALL 2010-01-03 1 86
ALL 2010-01-04 1 88
ALL 2010-01-05 1 84
ALL 2010-01-06 1 87
ALL 2010-01-07 1 82
편집 :는 대답하기 위해 테이블과 같이 반환
SELECT
'ALL' as GeogType,
CAST(v.AdmissionOn as date) as dtAdmission,
CASE WHEN @id IS NULL THEN 99 ELSE v.ID END,
COUNT(*) as nVisits
FROM dbo.Table1 v INNER JOIN dbo.Table2 t ON v.FSLDU = t.FSLDU5
WHERE v.AdmissionOn >= '01-01-2010' AND v.AdmissionOn < DATEADD(day,1,'02-01-2010')
AND v.ID = Coalesce(@id,ID)
GROUP BY
CAST(v.AdmissionOn as date),
CASE WHEN @id IS NULL THEN 99 ELSE v.ID END
ORDER BY 2,3,4
첫 번째 질문 :
나는 임시 테이블을 선언하고 t에서 결과를 삽입하는 함수를 만들었습니다. 그는 그 안에 함수를 집계 한 다음 user662852
의 예제를 사용하여 이동 평균을 계산합니다.
예 하드 코딩 된 날짜 범위와 그 쿼리의 다른 몇 가지 사항은 실제 기능에 변수가 있지만 테스트 목적으로 만 사용되었습니다. 나는 이것을 밖으로 시험 할 것이다! – Mike
6 일 이전 날짜와 오늘 날짜를 어떻게 설명 할 수 있습니까? 나는 그것이 그것을하는 것을 알고있다. 그러나 내가 그것을 볼 때 DATEADD 함수 때문에 플러스의 6 일인 것으로 간주한다 – Mike
당신의 질문에 대답하여 대답을 편집했다 – user662852