2017-10-05 6 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 

S'il s'agit de ma table, je souhaite que la moyenne soit une colonne calculée et que sa formule en général soit la moyenne de la colonne Valeur précédente de 3 lignes.SQL Server 2012 Colonne calculée

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

Comment puis-je faire une telle chose dans la colonne calculée? Y a-t-il un meilleur moyen d'y parvenir?

Merci d'avance.

+0

Quand vous dites trois derniers, ce qui implique une commande, ce qui nécessite une requête avec un n ordre par clause. Les colonnes calculées ne sont pas conçues pour fonctionner de cette manière, elles sont basées sur une seule ligne. Je suis d'accord avec TheGameisway en ce sens que vous devriez utiliser une vue. Les fonctions Lead et Lag peuvent être utiles. –

+0

Merci. Pouvez-vous m'aider avec un exemple de cela? Je n'ai jamais utilisé les fonctions de lead et lag – Madhukar

+0

On dirait que vous avez une réponse qui devrait fonctionner en utilisant la fonction de la fenêtre avg. –

Répondre

2

j'irais avec vue et utiliser la fonction avg windows

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

réponse Mise à jour: vous pouvez utiliser la clause de cadres comme ci-dessous

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

Pour chaque ligne, la valeur doit correspondre à la moyenne de 3 valeurs de ligne précédentes. Je suis incapable d'obtenir cela en utilisant votre solution. – Madhukar

+0

Votre deuxième exemple de ligne ne dit pas que (25 + 15)/2 ' – TheGameiswar

+0

s'il a 3 lignes précédentes alors sa moyenne de 3 rangées sinon 2 précédentes ou 1 rangée précédente. Dans ma question j'ai inclus la ligne actuelle et les 2 précédentes lignes – Madhukar