SQL PARA RETORNAR PENULTIMO REGISTRO MAIOR
Caso o problema tenha sido resolvido, por favor encerre o tópico!
Obrigado
Obrigado
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.
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.

você criou os indices na tabela?
Pode ser isso que esta te prejudicando!
Pode ser isso que esta te prejudicando!
Crie essa função no banco e veja se fica mais rápido
para chamar faz o seguinte
Para trazer todo mundo
Para trazer somente um cliente
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;
Tópico encerrado , respostas não são mais permitidas