Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Furriel

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

Mensagens Recomendadas

Furriel    0
Furriel

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Furriel    0
Furriel
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Furriel    0
Furriel

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Furriel    0
Furriel

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Furriel    0
Furriel

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Furriel    0
Furriel

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade