Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] consulta especial

Estas en el tema de consulta especial en el foro de Mysql en Foros del Web. Saludos. como me pudo, recurro a ustedes los sensei de las DB. tengo una tabla con algo asi data ----------------------- id = A.I cedula = ...
  #1 (permalink)  
Antiguo 30/03/2016, 18:54
 
Fecha de Ingreso: julio-2015
Ubicación: Medellin
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
consulta especial

Saludos.

como me pudo, recurro a ustedes los sensei de las DB.

tengo una tabla con algo asi

data
-----------------------
id = A.I
cedula = INT
codigo = VAR

y tengo datos parecidos a estos

Código MySQL:
Ver original
  1. id    cedula         codigo
  2. 1    123456789      pago
  3. 2    123456789      no pago
  4. 3    123456789      no pago
  5. 4    123456789      pago
  6. 5    987654321      no pago
  7. 6    987654321      pago
  8. 7    987654321      pago
  9. 8    123            pago
  10. 9    123            no pago
  11. 10    1              pago

lo que necesito es una consulta que me arroje los dos ultimos registros de cada cedula osea algo asi

Código MySQL:
Ver original
  1. cedula        codigo1      codigo2
  2. 123456789     pago          no pago
  3. 987654321     pago          no pago
  4. 123           no pago         pago
  5. 1             pago

En este orden de ideas seria que en una columna me muestre la cedula con sus dos ultimos registros en el campo codigo, si no se puede entonces que sean en distintas filas. gracias!!

Última edición por chapacua; 30/03/2016 a las 19:01
  #2 (permalink)  
Antiguo 31/03/2016, 12:33
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: consulta especial

Hola chapacua:

¿Y qué fue lo que intentaste hacer para obtener la consulta? porque supongo que intentaste hacer algo, pero no veo ningún código en tu post. Ojo con eso.

Tienes varias formas para hacer la consulta, independientemente de si lo quieres en forma de columna o en forma de fila, pero el detalle está en que nos digas ¿cómo determinas cuáles son los últimos dos registros para cada cédula?... ¿tienes algún campo tipo fecha o el campo id es consecutivo?

La forma más "simple" para obtener lo que quieres (una vez que nos digas cómo es el órden de los registros) sería con una función tipo RANK para enumerar los registros... Checa estos ejemplo:

http://forums.mysql.com/read.php?32,...665#msg-225665

http://www.artfulsoftware.com/infotr...ip.php?id=1098

Tambien puedes hacerlo en forma de columnas mediante subconsultas, con una función tipo MAX, una para el último (MAX simple) y otra para el penúltimo (MAX pero eliminando el registro anterior, para que te arroje el penúltimo)

haz el intento, si tienes problemas postea lo que intentaste hacer y con gusto te ayudamos a completar y/o corregir lo que falte.

Saludos
Leo.
  #3 (permalink)  
Antiguo 06/04/2016, 19:00
 
Fecha de Ingreso: julio-2015
Ubicación: Medellin
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: consulta especial

Hola Leo, gracias por tu respuesta
solucioné con la siguiente consulta que me ayudó a hacer mi jefe

Código MySQL:
Ver original
  1. CREATE TEMPORARY TABLE tmp select cedula,max(fecha)as fecha,max(id) as tt, tipi  from `data` group by `cedula`
  2. select a.cedula,b.tt,b.fecha,b.tipi,max(a.id),max(a.fecha),max(a.tipi) as tt1
  3. from data a, tmp b
  4. where a.cedula=b.cedula and a.id <> tt
  5. group by a.cedula,b.tt

Etiquetas: campo, especial, registros, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:51.