• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Furriel

[SQL2000]Calcular a Média de vários valores (incluindo null's)

15 mensagens neste tópico

Olá,

Tenho uma dúvida :D

Tenho uma tabela de processos de vendas de imóveis e quero calcular o tempo que demora a vender um determinado tipo de imóvel, por exemplo apartamentos.

Na tabela dos processos tenho lá o tipo de imóvel, a data de inicio do processo e a data fim do processo.

Se o imóvel não tiver sido vendido a data fim estará como null, mas para calcular a média, queria que esse campo tomasse o valor da data corrente, GETDATE().

Já estive a fazer um Stored Procedure mas não consigo fazer esta parte, preciso de ajuda, estou a ficar sem ideias :thumbsup:

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok... sql2000, n tinha visto, uma dessas tecnologias microsoft...

queres pedir um desses valores usando só sql, pensei que estivesses a escrever uma pequena aplicação.

eu não sou grande aventureiro de plsql, mas concerteza terás que usar uma função de média... AVG() ou coisa que o valha. e pedir as mádias todas usando uma expressao condicional.

porque é que nao escrever aí o que já escreveste até agora...

é que nem a estrutura das tabelas aí afixaste, assim torna-se dificil ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
CREATE PROCEDURE Alinea_B_Tempo_Medio @TP nvarchar (30), @OP nvarchar (1)  AS 

IF(@OP=1)
BEGIN
SELECT     PC_TP, AVG(DATEDIFF(d, PC_DI, PC_DF)) AS Tempo_Medio
FROM         dbo.PROCESSO
WHERE     (PC_DF IS NOT NULL) AND (PC_TP=@TP)
GROUP BY PC_TP
END
ELSE
IF(@OP=0)
BEGIN
	DECLARE @data datetime
	SET @data = GETDATE()
	IF (PC_DF IS NULL)
	BEGIN
		(SELECT     PC_TP, AVG(DATEDIFF(d, PC_DI, @data)) AS Tempo_Medio1
		FROM         dbo.PROCESSO
		WHERE (PC_TP=@TP)
		GROUP BY PC_TP)
	END

END
GO

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa lá mas... valores nulos a entrar para a média não é um bocado incorrecto?

Não devias usar essas linhas para a média. Não têm peso na média.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa lá mas... valores nulos a entrar para a média não é um bocado incorrecto?

Não devias usar essas linhas para a média. Não têm peso na média.

O problema é esse mesmo. É que tenho que ter a opção de fazer a média com os imóveis que ainda não foram vendidos e como tal o processo ainda não tem data fim, logo está a null, e assim para esses determinados processos tenho que calcular a média como se a data fim fosse a data da realização da média.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vamos supor que não vendestes imóveis.

Então como é que calculas a média de 3 imóveis que não foram vendidos? A operação não é válida. Assim como dividir por 0 também não é uma operação válida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como não foram vendidos, a média da venda tem que ser feita com a data inicio e com a data actual.

                  data inicio    data fim

imóvel1      1-2-2005    23-6-2005

imóvel2      15-5-2005  10-8-2005

imóvel3      1-12-2006        null        ----> fica com a data de hoje 18-1-2007, só para fazer a média.

No problema tenho que poder calcular a média dos imóveis vendidos que já consegui fazer e agora falta calcular a média considerando também os não vendidos, em que o valor da data fim tem que tomar o valor da data actual, só para fins de contas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Resolvido ;)

Criei uma tabela temporária onde insiro todos os valores e depois é só fazer AVG :D

Obrigado na mesma

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continuo a achar que é incorrecto.

O resultado dado pelo AVG neste caso não é correcto. Não é uma média dos prédios vendidos. É outra coisa qualquer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continuo a achar que é incorrecto.

O resultado dado pelo AVG neste caso não é correcto. Não é uma média dos prédios vendidos. É outra coisa qualquer.

Não deixas de ter razão. Para mim não faz muito sentido mas se no enunciado pede para fazer assim, é assim que tenho que fazer :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hii pronto, enunciado... Já podias ter dito lol. Se o gajo que fez o enunciado não percebe nada disto já é outra coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hii pronto, enunciado... Já podias ter dito lol. Se o gajo que fez o enunciado não percebe nada disto já é outra coisa.

Ele percebe e muito, o problema é que todos os anos tem que se mudar alguma coisa :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Compreendo, para falar a sério as coisa nem sempre são como pretendemos, acontece mais quando a aplicação vai recebendo actualizações sucessivas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora