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

[SOLUCIONADO] Seleccionar solo ultimo registro por fecha de un grupo previamente seleccionado

Estas en el tema de Seleccionar solo ultimo registro por fecha de un grupo previamente seleccionado en el foro de Mysql en Foros del Web. Buenas. El título talvez suena un poco confuso, espero ser un poco mas descriptivo ahora. Tengo una tabla de clientes, donde los servicios se diferencian ...
  #1 (permalink)  
Antiguo 10/10/2013, 14:31
 
Fecha de Ingreso: octubre-2013
Ubicación: Lima
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Seleccionar solo ultimo registro por fecha de un grupo previamente seleccionado

Buenas.

El título talvez suena un poco confuso, espero ser un poco mas descriptivo ahora.

Tengo una tabla de clientes, donde los servicios se diferencian por el numero de tracking. Cada vez que actualizo un proceso, se inserta un registro nuevo con todos los datos del cliente y el mismo numero de trackin solo variando la fecha de actualización y el código del estado del servicio (1,2,3,4,5... donde el valor mas alto es el mas reciente)


[URL="http://perfumebaratos.com/imagen/track-allrecords.jpg"]http://perfumebaratos.com/imagen/track-allrecords.jpg[/URL]

Ahora mismo estoy listando los registros, pero resulta confuso ver un mismo cliente, con los mismos datos, unicamente variando el estado de su trámite:


[URL="http://perfumebaratos.com/imagen/track-frontend.jpg"]http://perfumebaratos.com/imagen/track-frontend.jpg[/URL]

De la imagen anterior se puede apreciar el cliente "Lucia Sotelo" en repetidas veces con el mismo numero de tracking y todos los updates listados. Lo cual genera confusion

Lo que necesito es SOLAMENTE listar cada nombre de cliente, con el último status actualizado, puede identificarse por fecha (campo ser_ingreso) o por el campo "ser_status" donde los valores van desde 1 al 11, siendo 11 el máximo valor reciente.

El nombre de cliente puede repetirse, siempre y cuando este cliente tenga 2 tracking number distintos. (1 cliente, 2 servicios tomados)

Hice una prueba usando "GROUP BY" para agruparlos por "ser_tracking", consegui evitar la duplicidad, pero no me devuelve el ultimo estado, sino el primero.. y asi no me es util.


[URL="http://perfumebaratos.com/imagen/track-groupby.jpg"]http://perfumebaratos.com/imagen/track-groupby.jpg[/URL]

Apreciaré mucho su apoyo, dejando un link aqui al SQL de la tablita en mención para su mejor análisis y ver quien me puede orientar con este QUERY que pensé era mas sencillo.

Tabla SQL:

http://perfumebaratos.com/imagen/servicios.sql

Gracias desde ya.

LuchoFox
  #2 (permalink)  
Antiguo 11/10/2013, 00:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

La idea es, mediante subconsulta, ordenar antes para que te devuelva primero los más recientes y hacer luego el GROUP BY, pues cortará dejando solo el primero según las agrupaciones. Agrupamos por cliente y tracking, claro. Creo que será suficiente con algo parecido a esto. Tal y como lo tienes ni siquiera hace falta ordenar por la fecha, pero haz pruebas y nos dices.
Código MySQL:
Ver original
  1. SELECT t1.ser_cliente,
  2.                  t1.ser_tracking,
  3.                  t1.ser_status,
  4.                 t1.ser_departure FROM
  5.  (SELECT ser_cliente, ser_tracking, ser_status, ser_departure FROM servicios
  6.         ORDER BY ser_cliente, ser_tracking, ser_status DESC)t1
  7. GROUP BY t1.ser_cliente, t1.ser_tracking

Última edición por jurena; 11/10/2013 a las 02:19
  #3 (permalink)  
Antiguo 11/10/2013, 00:58
 
Fecha de Ingreso: octubre-2013
Ubicación: Lima
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

Gracias por la respuesta Jurena. Pruebo ahorita y respondo.
  #4 (permalink)  
Antiguo 11/10/2013, 01:40
 
Fecha de Ingreso: octubre-2013
Ubicación: Lima
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

Cita:
Iniciado por jurena Ver Mensaje
La idea es, mediante subconsulta, ordenar antes para que te devuelva primero los más recientes y hacer luego el GROUP BY cortará dejando solo el primero según las agrupaciones. Agrupamos por cliente y tracking, claro. Creo que será suficiente con algo parecido a esto. Tal y como lo tienes ni siquiera hace falta ordenar por la fecha, pero haz pruebas y nos dices.
Código MySQL:
Ver original
  1. SELECT t1.ser_cliente,
  2.                  t1.ser_tracking,
  3.                  t1.ser_status,
  4.                 t1.ser_departure FROM
  5.  (SELECT ser_cliente, ser_tracking, ser_status, ser_departure FROM servicios
  6.         ORDER BY ser_cliente, ser_tracking, ser_status DESC)T1
  7. GROUP BY t1.ser_cliente, t1.ser_tracking
Jurena, el query que me proporcionaste funcionó a la perfección!

Muchas gracias por la ayuda, estaba trabado con esta consulta y ya está resuelta.

Saludos!

LuchoFox
  #5 (permalink)  
Antiguo 11/10/2013, 02:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

me alegro, LuchoFox,
ten cuidado con un detalle que te puse mal. El alias de la consulta era T1 y luego yo lo llamaba como t1, en minúscula. Ya lo he corregido en mi post anterior. Unifica poniendo siempre lo mismo, por ej. en este caso en minúscula, pues, aunque ahora no te da problema, podría hacerlo en un servidor linux, por ej.

Suerte en tus proyectos.
  #6 (permalink)  
Antiguo 11/10/2013, 02:25
 
Fecha de Ingreso: octubre-2013
Ubicación: Lima
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

Cita:
Iniciado por jurena Ver Mensaje
me alegro, LuchoFox,
ten cuidado con un detalle que te puse mal. El alias de la consulta era T1 y luego yo lo llamaba como t1, en minúscula. Ya lo he corregido en mi post anterior. Unifica poniendo siempre lo mismo, por ej. en este caso en minúscula, pues, aunque ahora no te da problema, podría hacerlo en un servidor linux, por ej.

Suerte en tus proyectos.
Me leíste el pensamiento Jurena, justamente lo cargué en LOCALHOST y funcionó bien, pero cuando lo subí al servidor linux, no me devolvía ningún registro. Estuve depurando campo por campo sin encontrar la solución, puse el t1 en minúsculas como me acabas de indicar y ya aparecen los registros sin problemas en la web.

Muchas Gracias nuevamente! dá gusto que gente experimentada brinde este apoyo importante para quienes aun estamos remando en estas lides de SQL.

Saludos y gracias nuevamamente!
  #7 (permalink)  
Antiguo 11/10/2013, 02:38
 
Fecha de Ingreso: octubre-2013
Mensajes: 3
Antigüedad: 10 años, 6 meses
Puntos: 0
Información Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

Hola buenas noches,andaba de paso por aqui y vi este problema que veo que afortunadamente esta resuelto,y solo para no quedarme con la tentación de dejarte mi solución solo la dejo por si alguien mas se pasa por aca y pues ya tendra 2 soluciones, mira respecto a como hacias la consulta no estabas tan errado solo era agregarle el MAX a el campo ser_status para que siempre te retorne el valor mas alto y agrupandolos tal cual lo hacias ya te retono lo que tu requerias. seria asi:

Código MySQL:
Ver original
  1. SELECT ser_ingreso,ser_tracking,ser_cliente,ser_tipo,ser_detalle,MAX(ser_status) AS estado FROM servicios GROUP BY ser_tracking


Bye y buena suerte a los 2
  #8 (permalink)  
Antiguo 11/10/2013, 02:48
 
Fecha de Ingreso: octubre-2013
Ubicación: Lima
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

Cita:
Iniciado por ggpolendo Ver Mensaje
Hola buenas noches,andaba de paso por aqui y vi este problema que veo que afortunadamente esta resuelto,y solo para no quedarme con la tentación de dejarte mi solución solo la dejo por si alguien mas se pasa por aca y pues ya tendra 2 soluciones, mira respecto a como hacias la consulta no estabas tan errado solo era agregarle el MAX a el campo ser_status para que siempre te retorne el valor mas alto y agrupandolos tal cual lo hacias ya te retono lo que tu requerias. seria asi:

Código MySQL:
Ver original
  1. SELECT ser_ingreso,ser_tracking,ser_cliente,ser_tipo,ser_detalle,MAX(ser_status) AS estado FROM servicios GROUP BY ser_tracking


Bye y buena suerte a los 2
GGPOLENDO, otra excelente solución. Muchas gracias por el aporte!
  #9 (permalink)  
Antiguo 11/10/2013, 08:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Seleccionar solo ultimo registro por fecha de un grupo previamente selecci

amigos,
la propuesta de ggpolendo no sirve, creo, para este caso, pues trae el MAX(), sí, pero para los demás campos te trae los valores del primer registro de cada grupo. Para hacer lo que quiere luchofox2 con MAX(), hay que trabajar sobre el WHERE y serviría solo para un grupo
Código MySQL:
Ver original
  1. SELECT camponumerico, otro1, otro2
  2. FROM tabla
  3. WHERE camponumerico = (
  4. SELECT MAX( camponumerico)
  5. FROM tabla )

Para una agrupación es lo mejor, pues en caso de haber varios registros que cumplan con el valor, te los traes todos sin problema.

Etiquetas: campo, fecha, grupo, insert, registro, registros, seleccionado, sql, tabla, ultimo
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 09:02.