![]() |
Subconsulta para escojer el ultimo de cada registro?
Buenas, tengo una consulta q por mas q la pienso no encuentro la funcion q me permita, lo siguiente: tengo una serie de registros con datos comunes q varian en montos y en fechas, lo q deseo es obtener el ultimo registro de cada grupo es decir algo asi:
Tabla inicial: CI Pagos fecha 123 50 30/10/96 123 23 31/11/96 123 45 31/12/96 436 45 30/10/96 436 96 31/11/96 436 87 31/12/96 576 63 30/10/96 576 74 31/11/96 se obtenga el siguiente resultado CI Pagos fecha 123 45 31/12/96 436 87 31/12/96 576 74 31/11/96 el ultimo pago por cada ci, una ayuda lo unico q se me ocurre es q tendria q sea con una subconsulta...help, gracias de antemano |
Buenas.
Lo que comentas yo lo suelo hacer por parámetros que se le pasan a la consulta y se recojen desde un formulario. Creo que en tu caso deberías de pasar el grupo que quieres consultar. |
Quizas pueda servir esto:
Select CI, max(fecha), max(pago) From Tabla Group By CI Si el valor de pago es único para la fecha más alta de un CI creo que esta select debe sacar primero la máxima fecha de cada CI y después buscará el máximo pago que será único...supongo... Saludos. |
Prueba con esta consulta, como bien dices creo que la solución pasa por una subconsulta:
un saludo |
Gracias basti tu ayuda me sirvio de maravillas pero luego de revisiones exite un problema:
cada CI(Carnets) tiene a su vez CP(comprobantes)y cuando un CI tiene mas de un CP solo me muestra el primero...arreglando el query: select CI, Pagos, Fecha, CP from Tabla tbl where Fecha = (select Max(Fecha) from Tabla where CI = tbl.CI AND CP=tbl.CP) me vota bien los resultados, pero cuando ya son muchos registros tarda tanto q sale Tiempo de espera agotado...Esto estoy haciendo en SQL Server 2000...esta mal el codigo o como puedo optimizarlo? Muchas Gracias |
Hola:
Ahora mismo no se me ocurre otra forma de consulta que te pudiese dar mejores resultados. Para acelerarlo podrías crear algún índice sobre los campos Fecha, CI y CP. Puedes probar incluso a crear un índice compuesto por los tres campos, o uno por fecha y otro por CI + CP. Prueba a ver cual te da mejores resultados. un saludo |
Obtener el ultimo Registro del grupo por mayor fecha.
Veo que han pasado años y todavia no responde tu pregunta,
Quizas esta query te sirva: select CI, Pagos, Fecha from Tabla tbl where EXISTS(select CI,Max(Fecha) As Fecha from Tabla Group by CI HAVING CI = tbl.CI And Max(Fecha) = tbl.Fecha) Saludos, |
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)
Recuerda poner los tags al código fuente, ejemplo: ![]() Gracias :) |
Lo que yo siempre hago es muy simple, hago la consulta con los filtros normales, le aplico orden descendente y sólo recibo el primer registro con:
SELECT TOP 1 |
Pero aquí se trata de encontrar el último registro de cada grupo y no sé cómo se aplicaría lo que comentas.
// Saludos |
Cita:
Aunque contiene 2 subconsultas, he probado esto en una base de datos que tengo, con una tabla que maneja una estructura demasiado parecida y que tiene 2'331.476 registros y se ejecuta bastante rápido, pero también es cierto que si se hace con un Group By y un Having, puede ser mas veloz la consulta. Saludos. |
Obtner el ultimo registro de cada grupo.
Solo intenta comprender la consulta que te envie anteriormente y veras que si te funciona y efectivamente es muy rapida.
Saludos, |
Y SI NO DESEO SELECCIONAR EL ULTIMO SI NO EL PENULTIMO
Tabla inicial: CI Pagos fecha 123 50 30/10/96 123 23 31/11/96 123 45 31/12/96 436 45 30/10/96 436 96 31/11/96 436 87 31/12/96 576 63 30/10/96 576 74 31/11/96 se obtenga el siguiente resultado CI Pagos fecha 123 23 31/11/96 123 23 31/11/96 576 63 30/10/96 |
Cita:
|
Una solución prudente creo seria esta.
SQL.
Se que es un post pasado pero puede servir a alguien. Para el Penultimo.
|
La franja horaria es GMT +2. Ahora son las 21:07:52. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi