¿Es posible una sentencia SQL que haga esto?

20/08/2008 - 10:48 por XTV | Informe spam
Hola a todos; me estoy volviendo loco en esta consulta SQL que trato de
hacer. Viendo lo que es me parece que debe de ser muy sencillo, pero no
consigo que me salga. A ver si me pueden echar una mano, por favor:

Tengo un tabla cuyo valores que me interesan tiene valores como estos:

Cliente Fecha Saldo
00101 06/08/2008 23:23:13 143,15
00101 20/08/2008 22:33:08 152,70
01006 10/08/2008 12:08:25 107,47
01006 20/08/2008 12:08:25 127,00
06536 18/08/2008 12:08:25 257,47


Quiero obtener un registro por cliente, con la fecha más alta (pero no mayor
de la que establezca en la SQL) y el saldo correspondiente a dicha fecha

La SQL seria más o menos:

SELECT Cliente, MAX(Fecha)
FROM Tabla
GROUP BY empresa
HAVING (MAX(Fecha) < CONVERT(DATETIME, '2008-08-19
23:59:59', 121))
ORDER BY Cliente

Claro, si meto la columna del saldo puedo calcular su máximo, mínimo,
promedio, etc. Pero NO VEO CÓMO conseguir el valor del saldo que corresponda
a la empresa y fecha que muestre cada registro

Para "solucionarlo" he hecho un procedimiento almacenada que con cursores
recorro esta consulta y lanzo otra que me muestre el saldo, haciendo un
simple WHERE al nombre del cliente y fecha. Pero no me vale; es
increiblemente largo pues dicha tabla tienes millones de registros y no esta
en un servidor remoto de internet que conecto como un servidor vinculado.

¿Se le ocurre a alguien alguna manera de conseguir esto, aparentemente tan
sencillo?

Muchas gracias desde ya por su ayuda

Saludos

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
20/08/2008 - 14:37 | Informe spam
Trata:

; with r_set
as
(
select
client, fecha, saldo,
rank(partition by client order by fecha DESC) as rn
from
t
where
fecha < '20080820'
)
select *
from r_set
where rn = 1;

select *
from t as a
where fecha = (
select max(b.fecha)
from t as b
where b.client = a.client and b.fecha < '20080820'
)
go


AMB



"XTV" wrote:

Hola a todos; me estoy volviendo loco en esta consulta SQL que trato de
hacer. Viendo lo que es me parece que debe de ser muy sencillo, pero no
consigo que me salga. A ver si me pueden echar una mano, por favor:

Tengo un tabla cuyo valores que me interesan tiene valores como estos:

Cliente Fecha Saldo
00101 06/08/2008 23:23:13 143,15
00101 20/08/2008 22:33:08 152,70
01006 10/08/2008 12:08:25 107,47
01006 20/08/2008 12:08:25 127,00
06536 18/08/2008 12:08:25 257,47


Quiero obtener un registro por cliente, con la fecha más alta (pero no mayor
de la que establezca en la SQL) y el saldo correspondiente a dicha fecha

La SQL seria más o menos:

SELECT Cliente, MAX(Fecha)
FROM Tabla
GROUP BY empresa
HAVING (MAX(Fecha) < CONVERT(DATETIME, '2008-08-19
23:59:59', 121))
ORDER BY Cliente

Claro, si meto la columna del saldo puedo calcular su máximo, mínimo,
promedio, etc. Pero NO VEO CÓMO conseguir el valor del saldo que corresponda
a la empresa y fecha que muestre cada registro

Para "solucionarlo" he hecho un procedimiento almacenada que con cursores
recorro esta consulta y lanzo otra que me muestre el saldo, haciendo un
simple WHERE al nombre del cliente y fecha. Pero no me vale; es
increiblemente largo pues dicha tabla tienes millones de registros y no esta
en un servidor remoto de internet que conecto como un servidor vinculado.

¿Se le ocurre a alguien alguna manera de conseguir esto, aparentemente tan
sencillo?

Muchas gracias desde ya por su ayuda

Saludos


Respuesta Responder a este mensaje
#2 XTV
21/08/2008 - 08:48 | Informe spam
PERFECTO

Muchas gracias por tu ayuda, así es rápido y sencillo (aunque muy astuto).

Un saludo

XTV

______________________________________

"Alejandro Mesa" escribió en el
mensaje de noticias:
Trata:

; with r_set
as
(
select
client, fecha, saldo,
rank(partition by client order by fecha DESC) as rn
from
t
where
fecha < '20080820'
)
select *
from r_set
where rn = 1;

select *
from t as a
where fecha = (
select max(b.fecha)
from t as b
where b.client = a.client and b.fecha < '20080820'
)
go


AMB



"XTV" wrote:

Hola a todos; me estoy volviendo loco en esta consulta SQL que trato de
hacer. Viendo lo que es me parece que debe de ser muy sencillo, pero no
consigo que me salga. A ver si me pueden echar una mano, por favor:

Tengo un tabla cuyo valores que me interesan tiene valores como estos:

Cliente Fecha
Saldo
00101 06/08/2008 23:23:13 143,15
00101 20/08/2008 22:33:08 152,70
01006 10/08/2008 12:08:25 107,47
01006 20/08/2008 12:08:25 127,00
06536 18/08/2008 12:08:25 257,47


Quiero obtener un registro por cliente, con la fecha más alta (pero no
mayor
de la que establezca en la SQL) y el saldo correspondiente a dicha fecha

La SQL seria más o menos:

SELECT Cliente, MAX(Fecha)
FROM Tabla
GROUP BY empresa
HAVING (MAX(Fecha) < CONVERT(DATETIME, '2008-08-19
23:59:59', 121))
ORDER BY Cliente

Claro, si meto la columna del saldo puedo calcular su máximo, mínimo,
promedio, etc. Pero NO VEO CÓMO conseguir el valor del saldo que
corresponda
a la empresa y fecha que muestre cada registro

Para "solucionarlo" he hecho un procedimiento almacenada que con cursores
recorro esta consulta y lanzo otra que me muestre el saldo, haciendo un
simple WHERE al nombre del cliente y fecha. Pero no me vale; es
increiblemente largo pues dicha tabla tienes millones de registros y no
esta
en un servidor remoto de internet que conecto como un servidor vinculado.

¿Se le ocurre a alguien alguna manera de conseguir esto, aparentemente
tan
sencillo?

Muchas gracias desde ya por su ayuda

Saludos


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida