전년도 데이터를 사용하여 계산 된 롤링 합계를 추적하려고합니다.롤오버 합계를 통한 SQL Over 문 사용
현재 내가 내 SQL로 이것을 가지고이 같은 결과를 다시 제공
SELECT lngTIMEID as Id,
lngEMPID as EmployeeId,
dtmdateapp AS [Date],
stroccur AS [Value],
(SELECT Sum(stroccur)
FROM [Attendance].[dbo].timeuse a
WHERE a.dtmdateapp between DateAdd(d, -366, d.dtmdateapp)
AND d.dtmDATEAPP
AND a.lngempid = d.lngempid) AS Total
FROM [Attendance].[dbo].[timeuse] d
WHERE lngEMPID = 1844140 AND absence = 'Unscheduled' AND lngRID IN (1,2,3,4,5,7,8,9,10,11,12,13,14)
:
+--------+------------+-----------+-------+-------+
| Id | EmployeeId | Date | Value | Total |
+--------+------------+-----------+-------+-------+
| 330435 | 1844140 | 4/17/2017 | 0.25 | 0.25 |
| 330849 | 1844140 | 4/19/2017 | 0.25 | 0.5 |
| 331108 | 1844140 | 4/20/2017 | 0.25 | 0.75 |
| 331641 | 1844140 | 4/24/2017 | 0.25 | 1 |
| 331736 | 1844140 | 4/25/2017 | 0.25 | 1.25 |
| 333761 | 1844140 | 5/5/2017 | 0.25 | 1.5 |
| 336080 | 1844140 | 5/17/2017 | 1 | 2.5 |
| 349752 | 1844140 | 8/2/2017 | 0.25 | 3 | <--- this should be 2.75
| 350994 | 1844140 | 8/9/2017 | 1 | 4 |
| 351426 | 1844140 | 8/11/2017 | 0.25 | 4.25 |
| 352132 | 1844140 | 8/15/2017 | 0.5 | 4.75 |
| 354236 | 1844140 | 8/25/2017 | 0.25 | 5 |
| 355580 | 1844140 | 8/29/2017 | 0.25 | 5.25 |
| 355650 | 1844140 | 9/5/2017 | 0.25 | 5.5 |
+--------+------------+-----------+-------+-------+
아이디어는이 사건의 모든을 통해 루프 및 요약 것입니다 현재 날짜의 1 년 이내에 발생하는 모든 이전 사건. 내 현재 코드와
는 계산에 문제가있을 경우 총 조회수 3
내가 제대로 계산하기 때문에 문에 걸쳐 SQL을 사용하고 싶습니다하지만 롤링와 함께 사용하는 방법을 잘 모르겠습니다 1 년 기간. 이것은 내가 사용하는 것입니다 :
SELECT lngTIMEID as Id,
lngEMPID as EmployeeId,
dtmdateapp AS [Date],
stroccur AS [Value],
sum(strOCCUR) OVER(ORDER BY dtmdateapp ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as [Total]
FROM [Attendance].[dbo].[timeuse] d
WHERE lngEMPID = 1844140 AND absence = 'Unscheduled' AND lngRID IN (1,2,3,4,5,7,8,9,10,11,12,13,14)
을이 데이터는 모두 같은 해에 발생하지만 늘 압연 1 년 기간을 위해 일 때문에 나에게 정확한 결과를 제공합니다
+--------+------------+-----------+-------+-------+
| Id | EmployeeId | Date | Value | Total |
+--------+------------+-----------+-------+-------+
| 330435 | 1844140 | 4/17/2017 | 0.25 | 0.25 |
| 330849 | 1844140 | 4/19/2017 | 0.25 | 0.5 |
| 331108 | 1844140 | 4/20/2017 | 0.25 | 0.75 |
| 331641 | 1844140 | 4/24/2017 | 0.25 | 1 |
| 331736 | 1844140 | 4/25/2017 | 0.25 | 1.25 |
| 333761 | 1844140 | 5/5/2017 | 0.25 | 1.5 |
| 336080 | 1844140 | 5/17/2017 | 1 | 2.5 |
| 349752 | 1844140 | 8/2/2017 | 0.25 | 2.75 |
| 350994 | 1844140 | 8/9/2017 | 1 | 3.75 |
| 351426 | 1844140 | 8/11/2017 | 0.25 | 4 |
| 352132 | 1844140 | 8/15/2017 | 0.5 | 4.5 |
| 354236 | 1844140 | 8/25/2017 | 0.25 | 4.75 |
| 355580 | 1844140 | 8/29/2017 | 0.25 | 5 |
| 355650 | 1844140 | 9/5/2017 | 0.25 | 5.25 |
+--------+------------+-----------+-------+-------+
어떻게 할 수 MS SQL의 Over 문에 1 년 롤링 시간 프레임을 추가 하시겠습니까?
이 문제는 dba.se에 자세히 설명했다 : [날짜 범위 롤링 합계 윈도우 함수를 사용하여 (https://dba.stackexchange.com/q/114403/57105) –
나는 원래의 상관 관계를 생각한다 하위 쿼리에 기본 쿼리와 동일한 절을 추가하면 하위 쿼리가 작동합니다 (부재 = '예약되지 않은'등). –
Thanks @JamesCasey, 방금 그 점을 간과했습니다. 도움을 주셔서 감사합니다 – Aaron