이전 레코드의 매개 변수를 사용하여 산술 계산이 필요한 열의 이동 평균을 계산하고 싶습니다.이전 레코드를 변수로 사용하여 이동 평균 계산하기
나는 Y는 항상 이전 기록에서 읽는 미터
(reading x - reading y)/(reading date @ x - reading date @ y)
공식
을 사용하여 날짜와, 내가 평균 속도를 결정하는 계산을 수행 할, 미터 독서 X에 대한 기록이있다. DATEDIFF는 일입니다. 내가 판독 2 년이 있고, 처음되지 이후 -Meter | Reading | Date
-------+---------+------------
1 | 39,000 | 1 Jan 2016
1 | 39,200 | 1 Feb 2016
1 | 39,300 | 1 Mar 2016
나는 추가로 계산 된 필드를 삽입 열이 최신 기록에서 읽을 것 , 뒤로 과정을하고 싶습니다.
Meter | Reading | Date | Rate
------+---------+------------+--------------------
1 | 39,000 | 1 Aug 2016 | (200/31) = 6.45
1 | 39,200 | 1 Sep 2016 | (100/30) = 3.33
1 | 39,300 | 1 Oct 2016 | Z
보고 용으로 이것을 선택하고 싶습니다.
- 편집 -
내가 0 오류로 나누기를 얻고 독서 X를 계산하기로 결정했다 - ReadingDiff로 별도로 Y 읽기. 난 MeterID (1)의 마지막 기록 및 MeterID 2의 제 레코드 사이 MeterDiff를 계산하는 것을 방지 할 방법을 선택리스트에서 1 개 이상의 MeterIDs이 있으므로
LEAD(MeterReading, 1, 0) OVER (PARTITION BY MeterID ORDER BY MeterReading) - MeterReading AS MeterDiff
? 각 MeterID의 첫 번째 레코드를 0으로 설정할 수 있습니까? SQL 서버는 정수 나눗셈을 수행하기 때문에, 읽기가 정수의 경우
이select t.*,
((reading - lag(reading) over (partition by meter order by date))/
nullif(datediff(day, lag(date) over (partition by meter order by date), date), 0)
)
from t;
, 다음주의 :
태그 'tsql'은 (는)'sql-server'를 가리 킵니다. 그러나 어떤 버전입니까? – Shnugo
@Shnugo - 2012 년과 2014 년을 사용하고 있습니다. 창 프레임 기능을 사용할 수 있다고 생각합니까? –