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

¿Como traer el ultimo registro cada cliente?

Estas en el tema de ¿Como traer el ultimo registro cada cliente? en el foro de Mysql en Foros del Web. Hola tengo una base de datos en la que tengo varias columnas, tres de ellas son accounID, ID, y timestamp, todas primary key. Un accountID ...
  #1 (permalink)  
Antiguo 26/02/2013, 10:05
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 12 años, 11 meses
Puntos: 0
¿Como traer el ultimo registro cada cliente?

Hola tengo una base de datos en la que tengo varias columnas, tres de ellas son
accounID, ID, y timestamp, todas primary key.

Un accountID puede tener varios ID distintos, por ejemplo

Si una empresa tiene el accountID 114, y tiene varios empleados quedaria algo como

Código:
accountID  ID
114            0000
114            0001
114            0008
114            0014
114            0055
y los ID no se repiten, incluso aunque sean distintas empresas excepto que el timestamp sea distinto.

Código:
accountID  ID
114            0000
114            0001
114            0008
114            0014
114            0055
500            0009
500            0021
500            0032
500            0088
500            0552
necesito traer una lista con el timestamp mas alto (ultima fecha) pero de cada , ID que paso en la query mediante un IN

Código MySQL:
Ver original
  1. ID IN ('j000','k0001','l8990')
  2.  AND accountID IN('114','500,'637')

Estuve viendo que se puede usar la función MAX() pero no logro resolver como, hasta ahora solo logre que me traiga el mayor timestamp de la lista de ID que le paso en el IN.
  #2 (permalink)  
Antiguo 26/02/2013, 14:03
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 14 años, 8 meses
Puntos: 41
Respuesta: ¿Como traer el ultimo registro cada cliente?

Intenta algo así, yo tengo un problema parecido pero de algo te pude ayudar
Código SQL:
Ver original
  1. SELECT MAX(ID), accountID FROM tabla GROUP BY accountID
__________________
Genio es todo aquel que conoce sus cualidades
  #3 (permalink)  
Antiguo 28/02/2013, 12:14
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: ¿Como traer el ultimo registro cada cliente?

Gracias, pero no me funciono, o al menos demora mucho en traer los resultados.
La tabla es muy pesada, son mas de 40 millones de registros y unas 30 columnas.
  #4 (permalink)  
Antiguo 28/02/2013, 12:36
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ¿Como traer el ultimo registro cada cliente?

no sabemos como se llama el campo de timestamp, pero lo que ha publicado xtimed es el camino correcto

SELECT MAX(thetimestamp), accountID FROM tabla GROUP BY accountID
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #5 (permalink)  
Antiguo 28/02/2013, 13:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: ¿Como traer el ultimo registro cada cliente?

El campo timestamp se llama timestamp.

En MySQL Workbench me lo marca en azul, así que, supongo debe ser una palabra clave; entonces, me pregunto, ¿Generará algún inconveniente que el campo tenga ese nombre?

Respecto al query, lo probé en una base mas chica y si funciona, pero en la query que estoy haciendo, que hace un Join de tablas implícito y es mas grande, demora demasiado.

De hecho el EXPLAIN me devuelve 8043 lineas sin la función MAX() y mas de 200.000 usando la función MAX().

Yo creo que debe ser un tema de optimizacion de tablas, por eso demora tanto.
  #6 (permalink)  
Antiguo 28/02/2013, 13:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como traer el ultimo registro cada cliente?

Cita:
En MySQL Workbench me lo marca en azul, así que, supongo debe ser una palabra clave; entonces, me pregunto, ¿Generará algún inconveniente que el campo tenga ese nombre?
Si. Puede devolver errores de sintaxis que no existen.
Cita:
Respecto al query, lo probé en una base mas chica y si funciona, pero en la query que estoy haciendo, que hace un Join de tablas implícito y es mas grande, demora demasiado.
Los JOINs implícitos tienden a generar productos cartesianos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 28/02/2013, 14:05
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ¿Como traer el ultimo registro cada cliente?

Cita:
Iniciado por E_Blue Ver Mensaje
En MySQL Workbench me lo marca en azul, así que, supongo debe ser una palabra clave; entonces, me pregunto, ¿Generará algún inconveniente que el campo tenga ese nombre?
Agregando a lo mencionado anteriormente, cuando tienes campos con nombres claves siempre puedes usar las tildes hacia la izquierda, por ejemplo:

Código MySQL:
Ver original
  1. SELECT `timestamp` FROM `table` WHERE `where`>`now`

las tildes a la izquierda le dicen al motor de mySQL que lo que está ahi dentro es un campo, tabla, BD, etc y no la interpretará como una palabra clave reservada para consultas :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: cada, registro, 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 13:32.