Nota:

Problema do aluno: Trabalho com o SQL Server 2000 e tenho vários campos de data numa tabela.

Necessidade: Preciso calcular a média entre todas as datas da tabela.

Solução: Criar uma função.

Primeiro, criamos um database e a tabela que nos servirá de base de dados.


CREATE DATABASE EXEMPLO_DATA
GO
–
USE EXEMPLO_DATA
–
CREATE TABLE DATAS
(
   DATA DATETIME
)
–
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:10.663' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:10.693' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:10.763' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:10.783' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:11.657' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:11.677' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:11.757' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:11.807' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:12.667' )
INSERT INTO DATAS VALUES ( ‘2004-05-12 17:21:12.687' )
GO

Agora, criamos a função:


CREATE FUNCTION CALCULAMEDIAENTREDATAS()
   RETURNS DATETIME
AS
BEGIN
   DECLARE @DATAINI DATETIME
   SELECT TOP 1 @DATAINI = DATA FROM DATAS ORDER BY DATA
   RETURN ( SELECT DATEADD (MS, AVG(DATEDIFF (MS, @DATAINI, DATA )), @DATAINI) FROM DATAS )
END
GO

E, finalmente:


SELECT DBO.CALCULAMEDIAENTREDATAS()