2017-10-05 2 views
1
ID Date Value Average 
1 10/5/2017 15 15 
2 10/6/2017 25 20 
3 10/7/2017 35 25 
4 10/8/2017 45 35 
5 10/9/2017 55 45 
6 10/10/2017 65 55 
7 10/11/2017 75 65 

이 테이블이 내 계산 값이면 평균은 계산 된 열이고 해당 수식은 일반적으로 이전 3 행의 값 열 평균입니다.SQL Server 2012 계산 열

(Ex. for 2nd row it is (25+15)/2) 

계산 된 열에서 어떻게 할 수 있습니까? 이것을 달성하기위한 더 좋은 방법이 있습니까?

미리 감사드립니다.

+0

아래

같은 프레임 절을 사용할 수 있습니다 마지막 세 개는 질서가 필요한 질서를 의미합니다. n order by 절. 계산 된 열은 그런 식으로 작동하지 않으므로 단일 행을 기반으로합니다. 나는 당신이 전망을 사용해야한다는 점에서 TheGameisway에 동의합니다. 리드 및 래그 기능이 유용 할 수 있습니다. –

+0

감사합니다. 그 예를 들고 나를 도울 수 있습니까? 나는 결코 리드와 래그 함수를 사용하지 않았다. – Madhukar

+0

avg 윈도우 함수를 사용하여 대답해야하는 것처럼 보였다. –

답변

2

내가 avg 창 기능을 볼 수있는 가서 사용하는 것이

select 
    id, 
    date, 
    value, 
    avg(value) over (order by id) 
    from table 

업데이트 답 : 당신은 당신이 말하는 Working Demo

;with cte(id,date,val) 
as 
(

select 1 ,'10/5/2017' , 15 UNION ALL 
select 2 ,'10/6/2017' , 25 UNION ALL 
select 3 ,'10/7/2017' , 35 UNION ALL 
select 4 ,'10/8/2017' , 45 UNION ALL 
select 5 ,'10/9/2017' , 55 UNION ALL 
select 6 ,'10/10/2017', 65 UNION ALL 
select 7 ,'10/11/2017', 75 
) 
SELECT *,avg(VAL) OVER (ORDER BY id rows between 2 PRECEDING and current row) FROM CTE 
+0

각 행에 대해 값은 3 개의 이전 행 값의 평균이어야합니다. 나는 당신의 솔루션을 사용하여 그것을 얻을 수 없습니다. – Madhukar

+0

두 번째 행 예제에서는 이전 3 행이 있고 그 다음 이전 행 2 행 또는 이전 1 행의 평균이 3 행인 경우 '(25 + 15)/2' – TheGameiswar

+0

을 표시하지 않습니다. 내 질문에 내가 현재 행과 이전 2 행을 포함 – Madhukar