Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como obtener el registro anterior al ultimo (https://www.clubdelphi.com/foros/showthread.php?t=55730)

MRang14 24-04-2008 22:01:05

Como obtener el registro anterior al ultimo
 
Buen dia !

Queriendo buscar ayuda en el foro para solucionar este problemilla.
Necisito a traves de un query obtener el siguiente resultado de un reporte con los siguientes datos

Código:


select NEmp, Nombre, Fecha from tabla order by nemp
 
NEmp Nombre Fecha
4      Alicia    01/01/07
4      Alicia    01/20/07
4      Alicia    01/30/07
4      Alicia    02/05/07
4      Alicia    02/15/07
4      Alicia    03/02/07
8      Alvaro  01/10/07
8      Alvaro  02/02/07
10    Martha  01/08/07
10    Martha  01/20/07
10    Martha  01/30/07

De este resultado necesito el dato de la fecha anterior a la ultima es decir
para el caso del emp=4 necesito la fecha 02/15/07 y del empleado 8 necesito 01/10/07 y para el 10 la fecha 01/20/07

Alguien me pudiera dar una pista de como hacerlo.

de antemano agradesco su apoyo.

Dedalo 24-04-2008 22:33:16

Yo pondria un filtro al fichero con el numero de empleado luego un "Last" para buscar el ultimo y luego "Prev" para ir al anterior. En caso de que solo haya uno y quieras tomar una accion para ese caso lo puedes consultar con BOF.
Código Delphi [-]
 
 
with TEmpleados do
begin
  TEmpleados.Filter:='Num='''+NumEmp+'''';
  TEmpleados.Last;
  TEmpleados.Prev;
  if TEmpleados.BOF do {accion para el xcaso de que no haya previo};
end;

ContraVeneno 25-04-2008 00:24:44

Código SQL [-]
Select A.Fecha, (Select Top 1 B.Fecha
                       From Tabla B
                       where B.ID = A.ID and B.Fecha < A.Fecha
                       Order by B.Fecha Desc) as FechaAnterior
From Tabla A
Where A.ID = 1

MRang14 25-04-2008 01:11:50

Muchas gracias Contraveneno

por tu ayuda....

Uefor 05-05-2008 21:05:17

Yo tengo un problema similar a este, pero no doy con la tecla...
Son varias las tablas y quiero ordenar los usuarios dependiendo de si han asistido ya o no a otros eventos

Esta sería la estructura de las tablas:
Tabla1 (usuarios incluidos)
Id
IdUsuario
Idevento
Fechacontrol

Tabla2
Idevento
Fecha
Hora
Lugar
etc

Tabla3
Idusuario
Nombre
Apellidos
etc

Lo que quiero es mostrar en último lugar a los usuarios que asistieron al último evento (el más reciente) y así dar preferencia a los que llevan más tiempo sin asistir.
Actualmente el orden que uso es el de la fechacontrol porque no se como ordenar rescatando las fechas de eventos anteriores respecto del que se seleccione, no estoy seguro de haberme explicado bien.

Uefor 05-05-2008 21:05:55

.................

tonyskl 06-05-2008 11:21:53

Cita:

Empezado por Uefor (Mensaje 284338)
...

Esta sería la estructura de las tablas:
Tabla1 (usuarios incluidos)
Id
IdUsuario
Idevento
Fechacontrol

Tabla2
Idevento
Fecha
Hora
Lugar
etc

Tabla3
Idusuario
Nombre
Apellidos
etc

Lo que quiero es mostrar en último lugar a los usuarios que asistieron al último evento (el más reciente) y así dar preferencia a los que llevan más tiempo sin asistir.
Actualmente el orden que uso es el de la fechacontrol porque no se como ordenar rescatando las fechas de eventos anteriores respecto del que se seleccione, no estoy seguro de haberme explicado bien.

Mi propuesta...

Código SQL [-]
select t3.Nombre, MAX(t2.fecha) 
  from tabla1 t1, tabla2 t2, tabla3 t3
 where t1.dEvento = t2.IdEvento
   and t1.idUsuario = t3.IdUsuario
group by t3.Nombre    
order by t2.fecha

Algo así seria...

Ya me comentaras... Saludos!

Uefor 06-05-2008 14:39:28

Gracias tonyskl,
Lo que tengo actualmente se parece bastenta a esa sentencia, el problema se plantea con la fecha máxima que rescata esa consulta precisamente.

Actualmente puedo consultar una lista de un evento para hoy y tener ya en la db usuarios incluidos para otro evento que se realizará mañana o pasado, al recoger la fecha máxima me tira a la cola usuarios que ya están apuntados para mañana, el objetivo es que pierdan preferencia los que fueron ayer o antes de ayer etc... nos los que iran a eventos futuros.

Ese es dilema realmente...
SaLu2

tonyskl 06-05-2008 16:19:57

Cita:

Empezado por Uefor (Mensaje 284508)
Gracias tonyskl,
Lo que tengo actualmente se parece bastenta a esa sentencia, el problema se plantea con la fecha máxima que rescata esa consulta precisamente.

Actualmente puedo consultar una lista de un evento para hoy y tener ya en la db usuarios incluidos para otro evento que se realizará mañana o pasado, al recoger la fecha máxima me tira a la cola usuarios que ya están apuntados para mañana, el objetivo es que pierdan preferencia los que fueron ayer o antes de ayer etc... nos los que iran a eventos futuros.

Ese es dilema realmente...
SaLu2

Ok simplemente añade entonces en la clausula where que la fecha del evento sea menor al current_date o current_date - 1 o current_date + 1... eso ya lo que te convenga...

Código SQL [-]
select t3.Nombre, MAX(t2.fecha) 
  from tabla1 t1, tabla2 t2, tabla3 t3
 where t1.dEvento = t2.IdEvento
   and t1.idUsuario = t3.IdUsuario
   and t2.fecha < current_date
group by t3.Nombre    
order by t2.fecha

Saludos!!!

Uefor 07-05-2008 00:46:19

No me sirve tampoco... pero estoy dandole vueltas a otra solución, he decidido incluir la fecha del ultimo evento al que asistió al mismo tiempo que se apunta al nuevo evento, de este modo con un sencillo "ORDER BY Fecha" resuelto.

El problema es este ahora: necesito ingresar en un INSERT la fecha del último evento al que asistió el usuario para establecer el orden de preferencias en el que se está apuntando, pero si el usuario no ha asistido a ningún evento me da un error porque no existe en la tabla.
Cita:

"SELECT TOP 1 * FROM tabla WHERE (Fecha < #"&FechaEvento&"# OR Fecha IS NULL) AND (Usuario="&Usuario&" OR Usuario IS NULL) ORDER BY Fecha DESC"
¿que tengo mal hecho en la consulta?...

Las variables de ASP funcionan bien, esta misma consulta sin los "OR Fecha IS NULL" etc.. funciona bien con usuarios que ya están en la tabla.
SaLu2

tonyskl 07-05-2008 08:57:24

Cita:

Empezado por Uefor (Mensaje 284709)
No me sirve tampoco... pero estoy dandole vueltas a otra solución, he decidido incluir la fecha del ultimo evento al que asistió al mismo tiempo que se apunta al nuevo evento, de este modo con un sencillo "ORDER BY Fecha" resuelto.

El problema es este ahora: necesito ingresar en un INSERT la fecha del último evento al que asistió el usuario para establecer el orden de preferencias en el que se está apuntando, pero si el usuario no ha asistido a ningún evento me da un error porque no existe en la tabla.
¿que tengo mal hecho en la consulta?...

Las variables de ASP funcionan bien, esta misma consulta sin los "OR Fecha IS NULL" etc.. funciona bien con usuarios que ya están en la tabla.
SaLu2

Si el usuario no existe en la tabla te devolvera null, eso es lógico.
No se exactamente que ves mal en la query...

Simplemente el nuevo campo que has dado de alta debes decirle que puede ser null, ya que pueden existir usuarios que no hayan asistido a ningún evento.

¿Por que no te sirve la última query que te propuse?

Saludos!!

Uefor 07-05-2008 23:48:33

Parece ser que el problema lo tenía en ál recoger la query en el ASP, ya lo tengo resuelto... Gracias

La consulta que me posteaste creo que no devuelve los registros de eventos anteriores, devuelve la fecha del último evento desde hoy hacia atrás y necesitaría desde la fecha del evento que puede ser de ayer o de pasado mañana también.
SaLu2


La franja horaria es GMT +2. Ahora son las 04:11:20.

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