Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Últimos 3 registros ordenados descendestes mas la union de otros con datos fijos (https://www.clubdelphi.com/foros/showthread.php?t=75975)

jangel_ramirezm 30-09-2011 19:57:03

Últimos 3 registros ordenados descendestes mas la union de otros con datos fijos
 
Hola

Antes que nada buenas tardes, y de antemano muchas gracias por tomarse el tiempo de leer este hilo
mi duda es la siguiente :

Estoy haciendo un reporte en fastreport donde debo mostrar los 3 últimos abonos de una cuenta, en caso de que no tenga 3 muestro datos fijos, la consulta SQL(SQL Server 2005) que tengo es la Siguiente:

Código SQL [-]
SELECT TOP 3 FECHA, IMPORTE, SALDO_ACT, NUM_RECIBO, TIPO_MOV FROM ABONOS  
  UNION SELECT  '01/01/1900' fecha, 0 IMPORTE, 0 SALDO_ACT, 0 NUM_RECIBO , 'X'  
  UNION SELECT  '31/12/1899' fecha, 0, 0, 0, 'X'  
  UNION SELECT  '30/12/1899' fecha, 0, 0, 0, 'X'         
WHERE NUM_CUENTA = :NUM_CUENTA 
ORDER BY FECHA DESC

el caso es que esta consulta me trae los 3 primeros registros de la tabla y las uniones, y me piden los 3 últimos y las uniones
alguna idea de como deberia armar la consulta para obtener los datos como los piden?.

Muchos saludos. y de nuevo gracias

oscarac 30-09-2011 21:26:46

Cita:

Empezado por jangel_ramirezm (Mensaje 414211)
el caso es que esta consulta me trae los 3 primeros registros de la tabla y las uniones, y me piden los 3 últimos y las uniones
alguna idea de como deberia armar la consulta para obtener los datos como los piden?.
Muchos saludos. y de nuevo gracias

esa partecita no la entendi...

quieres sacar los 3 ultimos, en caso de que existen menos de 3 registros debes colocar datos fijos hasta completar los 3 registros. es asi como lo quieres?

Chris 30-09-2011 21:32:20

En FastReports hay una opción para limitar el número de registros que se imprimen. Allí tienes una herramienta para solucionar tu problema. Otra sería limitar el número de registros devueltos por la base de datos. Sé como se puede hacer en Firebird, pero de SQL Server no tengo ni idea.

Saludos,
Chris

jangel_ramirezm 30-09-2011 22:24:45

Muchas gracias por su respuesta,
en fastreport si limito el numero de registros a mostrar en 3, la consulta puede arrojar como máximo 6 registros (el top 3 y la uniones)
y como minimo 3 (las uniones) y asi en caso de que haya menos de 3 abonos (devueltos por el top 3) por lo menos mostraria los datos de la uniones, pero el problema está en la consulta ya que yo espero obtener los ultimos 3 registros y esta devuelve los primero 3
Ej:

Asi es como devuelve la consulta actual
01/01/2011, 100, 1000, 1, A (Datos como devuelve el top 3 )
02/01/2011, 100, 900, 2, A
03/01/2011, 100, 800, 3, A
01/01/1900, 0, 0, 0, X (datos de las uniones)
31/12/1899, 0, 0, 0, X
30/12/1899, 0, 0, 0, X

asi es como lo solicitaron

30/09/2011, 100, 100, 1, A
29/09/2011, 100, 200, 2, A
28/08/2011, 100, 300, 3, A
01/01/1900, 0, 0, 0, X (datos de las uniones)
31/12/1899, 0, 0, 0, X
30/12/1899, 0, 0, 0, X

he intentado poner el order by antes de las uniones pero marca error de sintaxis, vi una funcion LAST pero sigue marcando error,
intenté crear una vista pero los datos que me devuelve son los mismo ya que no he sabido como armar bien la sentencia.

Gracias por su ayuda.

Saludos

oscarac 30-09-2011 22:37:59

sigo sin comprender
porque segun la pregunta original.. eran solo 3 registros los que querias mostrar?
porque no pones un ejemplo de los datos que tienes...
menciona tambien como es que solicitas los datos.... pides solo los 3 ultimos? o tu colocas las fechas a pedir

jangel_ramirezm 30-09-2011 22:53:28

Hola

La consulta que hago puede devolver hasta 6 registros, en el fast report yo solo muestro 3
lo que me pidieron fue que mostrara los últimos 3, pero como puede haber cuentas que no tengan
3 abonos, le agregue el union con los datos fijos para rellenar esos espacios asi por lo menos la consulta
devolveria 3 registros.

probé con una subconsulta y creo que funcionó, me apoyé de un campo que es la llave primaria de la tabla

Código SQL [-]
  SELECT   FECHA, IMPORTE, SALDO_ACT, NUM_RECIBO, TIPO_MOV FROM     
  ABONOS  where   rec_id in (select top 3 rec_id from abonos where num_cuenta = 43  ORDER BY FECHA DESC)  
  UNION  SELECT  '01/01/1900' fecha, 0 IMPORTE, 0 SALDO_ACT, 0 NUM_RECIBO , ''  
  UNION  SELECT  '31/12/1899' fecha, 0, 0, 0, ''  
  UNION  SELECT  '30/12/1899' fecha, 0, 0, 0, ''         
  order by fecha desc

muchas gracias por su ayuda y por el tiempo que se toman para responder

Saludos.

oscarac 30-09-2011 22:57:31

ok
si ya te salio...
bien !!!!!


La franja horaria es GMT +2. Ahora son las 19:18:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi