Ver Mensaje Individual
  #8 (permalink)  
Antiguo 01/04/2009, 09:34
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: seleccionar el ultimo registro

SELECT
@rank:=@rank+1 AS Rank,
t.Fecha, t.ID, t.Cantidad
FROM (SELECT @rank:=0) r, tabla t inner join (select t.id ID, t.fecha FE from tabla t inner join (select fecha maximo from tabla order by fecha desc limit 1)t1 on t.fecha = t1.maximo)t2 on t.Fecha = t2.FE AND t.ID = t2.ID
ORDER BY Rank DESC LIMIT 1

El truco: saco la fecha más reciente, busco los registros que tienen esa fecha, pero luego entre ellos debo elegir el último almacenado. No puedo ordenar por ningún criterio útil (los datos de los otros dos campos no me sirven), tampoco puedo recurrir al orden en que los datos están almacenados (tal vez con un store procedure y pasando de uno a otro lo consiguiera), pero lo que he hecho es numerarlos en un ranking. El programa numera por fecha y en caso de coincidencia asigna números según están los datos almacenados; luego ordeno descendente por ese número de ranking y limito a 1. Creo que ya está.

Si vas a necesitar hacer esto a menudo, yo te recomendaría crea un campo tipo timestamp que te guardase la fecha y hora en que fue insertado. Todo sería más fácil (buscas la última fecha y ordenas por ese timestamp descendente con el limit 1 y ya estaría).

Estas son las soluciones MySQL. Las soluciones PHP (por otra parte, muy fáciles y también eficientes) debes pedirlas en el foro PHP. Se basarían en que los datos que cargas desde la base se cargan en el orden indicado y, en caso de no haber orden, tal y como los tienes almacenados.

Última edición por jurena; 01/04/2009 a las 09:43