.
IF OBJECT_ID('myTable') IS NOT NULL
DROP TABLE myTable;
CREATE TABLE myTable(ID INT, Data INT,[avg] INT);
GO
CREATE TRIGGER trg_running_avg ON myTable
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO myTable
SELECT ID,Data,AVG(Data) OVER (ORDER BY ID ROWS UNBOUNDED PRECEDING)
FROM inserted
END
INSERT INTO myTable(ID,Data)
VALUES (1,20),(2,4),(3,18)
SELECT *
FROM myTable
CREATE VIEW vw_average
AS
SELECT ID,Data,AVG(Data) OVER (ORDER BY ID ROWS UNBOUNDED PRECEDING)
FROM inserted
UPDATE myTable
SET avg = running_avg
FROM myTable A
INNER JOIN (SELECT ID,AVG(Data) OVER (ORDER BY ID ROWS UNBOUNDED PRECEDING) running_avg FROM myTable) B
ON A.ID = B.ID
CTE
WITH CTE_Update
AS
(
SELECT ID,
[avg] OldAvg,
AVG(Data) OVER (ORDER BY ID) AS NewAvg
FROM myTable
)
UPDATE CTE_Update SET OldAvg = NewAvg
source
share