Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2008
MRang14 MRang14 is offline
Miembro
 
Registrado: mar 2004
Ubicación: Tijuana, Mexico
Posts: 10
Poder: 0
MRang14 Va por buen camino
Unhappy 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.
Responder Con Cita
  #2  
Antiguo 24-04-2008
Avatar de Dedalo
Dedalo Dedalo is offline
Miembro
 
Registrado: abr 2008
Ubicación: Albacete (España)
Posts: 32
Poder: 0
Dedalo Va por buen camino
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;

Última edición por Dedalo fecha: 24-04-2008 a las 22:36:32.
Responder Con Cita
  #3  
Antiguo 25-04-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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
__________________

Responder Con Cita
  #4  
Antiguo 25-04-2008
MRang14 MRang14 is offline
Miembro
 
Registrado: mar 2004
Ubicación: Tijuana, Mexico
Posts: 10
Poder: 0
MRang14 Va por buen camino
Muchas gracias Contraveneno

por tu ayuda....
Responder Con Cita
  #5  
Antiguo 05-05-2008
Uefor Uefor is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
Uefor Va por buen camino
Exclamation

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.

Última edición por Uefor fecha: 05-05-2008 a las 21:16:35. Razón: Aclaración
Responder Con Cita
  #6  
Antiguo 05-05-2008
Uefor Uefor is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
Uefor Va por buen camino
Exclamation

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

Última edición por Uefor fecha: 05-05-2008 a las 21:07:59. Razón: Duplicado
Responder Con Cita
  #7  
Antiguo 06-05-2008
tonyskl tonyskl is offline
Miembro
 
Registrado: oct 2007
Posts: 18
Poder: 0
tonyskl Va por buen camino
Lightbulb

Cita:
Empezado por Uefor Ver Mensaje
...

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!
Responder Con Cita
  #8  
Antiguo 06-05-2008
Uefor Uefor is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
Uefor Va por buen camino
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

Última edición por Uefor fecha: 06-05-2008 a las 14:42:28. Razón: Errata
Responder Con Cita
  #9  
Antiguo 06-05-2008
tonyskl tonyskl is offline
Miembro
 
Registrado: oct 2007
Posts: 18
Poder: 0
tonyskl Va por buen camino
Lightbulb

Cita:
Empezado por Uefor Ver Mensaje
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!!!
Responder Con Cita
  #10  
Antiguo 07-05-2008
Uefor Uefor is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
Uefor Va por buen camino
Lightbulb

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
Responder Con Cita
  #11  
Antiguo 07-05-2008
tonyskl tonyskl is offline
Miembro
 
Registrado: oct 2007
Posts: 18
Poder: 0
tonyskl Va por buen camino
Smile

Cita:
Empezado por Uefor Ver Mensaje
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!!
Responder Con Cita
  #12  
Antiguo 07-05-2008
Uefor Uefor is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
Uefor Va por buen camino
Thumbs up

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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
obtener el ultimo registro resultado de una comparacion Gaim2205 Varios 2 11-09-2007 18:27:40
como obtener valor del ultimo registro. Gaim2205 Varios 4 10-09-2007 22:02:17
como obtener el ultimo registro gustavoh .NET 2 17-07-2006 14:29:07
Obtener el último registro insertado mutant09 SQL 3 04-05-2004 20:59:21
Obtener el último registro juanchi Conexión con bases de datos 2 06-02-2004 01:52:21


La franja horaria es GMT +2. Ahora son las 22:48:40.


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
Copyright 1996-2007 Club Delphi