SQL PARA RETORNAR PENULTIMO REGISTRO MAIOR

FILMAN 31/07/2014 12:22:39
#440075
Caso o problema tenha sido resolvido, por favor encerre o tópico!

Obrigado
MICHAELL 31/07/2014 15:09:52
#440084
infelizmente não deu certo...
fica uma consulta muito pesada.. varias subconsultas uma dentro da outra

queria apenas uma função simples, assim como max(data) me retorna a ultima data, gostaria uma maneira simples que me retorne a penultima data também.

minha ideia calcular uma média de consumo do cliente baseado pela diferença das ultimas duas compras.

FILMAN 31/07/2014 18:35:19
#440089
você criou os indices na tabela?

Pode ser isso que esta te prejudicando!
FILMAN 11/08/2014 21:09:41
#440351
Resposta escolhida
Crie essa função no banco e veja se fica mais rápido

CREATE FUNCTION RetornaRegistros()
RETURNS @ReturnTabela TABLE
(
CODIGOCLIENTE INT,
NOMECLIENTE VARCHAR(100),
ULTIMOREGISTRO DATE,
PENULTIMOREGISTRO DATE
)
AS
BEGIN
INSERT @ReturnTabela
SELECT T.CODIGO, T.NOME, T.ULTIMA_DATA, T.PENULTIMA_DATA
FROM (
SELECT
A.CODIGO,
A.NOME,
(SELECT MAX(B.DATA)
FROM CLIENTES B
WHERE B.CODIGO = A.CODIGO
) AS ULTIMA_DATA,
(SELECT MAX(C.DATA)
FROM CLIENTES C
WHERE C.CODIGO = A.CODIGO
AND C.DATA < (SELECT MAX(D.DATA) FROM CLIENTES D WHERE D.CODIGO = C.CODIGO)
) AS PENULTIMA_DATA
FROM CLIENTES A
) T
GROUP BY T.CODIGO, T.NOME, T.ULTIMA_DATA, T.PENULTIMA_DATA;

RETURN
END


para chamar faz o seguinte

Para trazer todo mundo
SELECT * FROM RetornaRegistros() ORDER BY NOMECLIENTE;


Para trazer somente um cliente
SELECT * FROM RetornaRegistros() WHERE CODIGOCLIENTE = 123456 ORDER BY NOMECLIENTE;
Página 2 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas