Foros del Web » Programando para Internet » PHP »

seleccionar el ultimo registro

Estas en el tema de seleccionar el ultimo registro en el foro de PHP en Foros del Web. saludos a todos el problema es el siguiente, en la siguiente consulta quiero seleccionar el utimo registro que este antes de la fecha 2009-01-07 es ...
  #1 (permalink)  
Antiguo 07/01/2009, 09:39
 
Fecha de Ingreso: septiembre-2008
Ubicación: Cuernavaca,Morelos,Mexico
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Exclamación seleccionar el ultimo registro

saludos a todos el problema es el siguiente, en la siguiente consulta quiero seleccionar el utimo registro que este antes de la fecha 2009-01-07 es decir el ultimo registro menor a esta fecha, la consulta la realizo de esta forma::

select fecha,existencia from movimientos where modelo='MATE0906' AND FECHA< '2009-01-07' ORDER BY fecha ASC;

el resultado de esta consulta seria es este
2009-01-05 -- 10
2009-01-05 -- 11
2009-01-06 -- 9
2009-01-06 -- 8
2009-01-06 -- 7

el problema es qe no se como recuperar el dato que seria el 2009-01-06--7 alguna sugerancia???
  #2 (permalink)  
Antiguo 07/01/2009, 09:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: seleccionar el ultimo registro

Mmmm
Código sql:
Ver original
  1. SELECT fecha,existencia FROM movimientos WHERE modelo='MATE0906' AND FECHA< '2009-01-07' ORDER BY fecha DESC LIMIT 1

Saludos.
  #3 (permalink)  
Antiguo 07/01/2009, 09:57
 
Fecha de Ingreso: septiembre-2008
Ubicación: Cuernavaca,Morelos,Mexico
Mensajes: 80
Antigüedad: 15 años, 7 meses
Puntos: 0
Cita:
Iniciado por GatorV Ver Mensaje
Mmmm
Código sql:
Ver original
  1. SELECT fecha,existencia FROM movimientos WHERE modelo='MATE0906' AND FECHA< '2009-01-07' ORDER BY fecha DESC LIMIT 1

Saludos.
SALUDOS GATORV
probe tu sugerencia pero cuando hay mas registros con la misma fecha recoge el primero no el ulitmo, esto es
si hay mas registros con la fecha 2009-01-06 te recoge el primero no el ultimo

Última edición por GatorV; 07/01/2009 a las 10:59
  #4 (permalink)  
Antiguo 07/01/2009, 10:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: seleccionar el ultimo registro

tomasy,

imagino que tendrás que utilizar otro criterio para eso, porque la fecha es la misma; si tienes un campo id en esa tabla, lo mejor sería utilizarlo en la ordenación:

SELECT fecha,existencia FROM movimientos WHERE modelo='MATE0906' AND FECHA< '2009-01-07' ORDER BY fecha DESC, id DESC LIMIT 1
  #5 (permalink)  
Antiguo 01/04/2009, 04:36
 
Fecha de Ingreso: abril-2009
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Respuesta: seleccionar el ultimo registro

Yo tengo un problema similar, necesito recuperar el último registro insertado, pero cuando tengo mas de uno en la misma fecha me da el primero y no el último.
la consulta que uso es:

Código PHP:
mysql_query("SELECT contabilidad.*, usuarios.nombre, usuarios.apellidos FROM contabilidad, usuarios WHERE contabilidad.Id=usuarios.ID" ORDER BY contabilidad.fecha DESC LIMIT 1); 
la solucion que he encontrado es hacer esto:
Código PHP:
$res_ultimo_apunte=mysql_query("SELECT contabilidad.*, usuarios.nombre, usuarios.apellidos FROM contabilidad, usuarios WHERE contabilidad.Id=usuarios.ID");
while(
$datos_ultimo_apunte2=mysql_fetch_array($res_ultimo_apunte))
{                        {
$datos_ultimo_apunte=$datos_ultimo_apunte2;

pero me parece una solucion un poco muy sucia
alguno me podria hechar una manita
Gracias,
Alberto
  #6 (permalink)  
Antiguo 01/04/2009, 05:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: seleccionar el ultimo registro

Allberto,

¿El último insertado tras el momento de hacer la inserción, o en otro momento?

¿Tienes algún campo id auto_increment que puedas usar para ordenar descendente y limitar a 1?

Puedes crear un campo de tipo timestamp que al insertar te cargue el dato del momento

Otra opción sería contar el total de registros y luego hacer una consulta con un limit con dos datos, el total obtenido menos 1 y 1. Ejemplo: si tienes 2000 registros seleccionas todos, pero limitas así LIMIT 1999,1

Pero debes decirnos qué tienes para poder trabajar y cuándo quieres obtener el último insertado, pues si se trata de obtenerlo tras insertarlo las api te ofrecerán soluciones cómodas, por ej. la de PHP.
  #7 (permalink)  
Antiguo 01/04/2009, 07:59
 
Fecha de Ingreso: abril-2009
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Respuesta: seleccionar el ultimo registro

realmente la seleccion que quiero hacer es el ultimo registro insertado en la fecha mas reciente

es decir si hago 3 apuntes poniendo las siguientes fechas
Fecha -- ID -- Cantidad
  1. 01/4/08 -- 354 -- 100
  2. 01/4/08 -- 103 -- 200
  3. 30/3/08 -- 213 -- 200
el registro que me interesa sacar es el 2º
que realmente es el ultimo que se ha hecho, ya que el 3º es uno que se hizo fuera de fecha.

Estoy usando PHP.

Gracias,
Alberto
  #8 (permalink)  
Antiguo 01/04/2009, 09:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
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
  #9 (permalink)  
Antiguo 06/05/2009, 19:35
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
seleccionar el ultimo registro

Buen dia

En mi caso tengo algo muy parecido

Con esta consulta:
Cita:
SELECT unidad, engrasado from serv_preventivo WHERE engrasado <= curdate() order BY unidad
obtengo los siguientes datos

unidad | engrasado
111 | 2009-04-07
111 | 2009-04-27
115 | 2009-03-29
115 | 2009-05-06


y quiero seleccionar para cada unidad el de fecha mas reciente, es decir

unidad | engrasado
111 | 2009-04-27
115 | 2009-05-06



que modificaciones habra que hacer en mi consulta??
  #10 (permalink)  
Antiguo 06/05/2009, 23:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: seleccionar el ultimo registro

select sv.unidad, t1.engrasado from serv_preventivo sv INNER JOIN (SELECT unidad, max(engrasado) maxi from serv_preventivo group by unidad)t1 ON sv.unidad = t1.unidad AND T1.maxi = sv.engrasado ORDER BY sv.unidad
  #11 (permalink)  
Antiguo 07/05/2009, 10:21
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: seleccionar el ultimo registro

Saludos:


Me da como resultado lo siguiente:

Cita:
Unknown column 't1.engrasado' in 'field list' Error: 1054
Y bueno aprovechando.... que funcion estan tomando los parametros "sv." "t1."



De antemano, Gracias.
  #12 (permalink)  
Antiguo 07/05/2009, 10:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: seleccionar el ultimo registro

Puse mal la referencia a un campo, que debía ser t1.maxi.
A ver, sv es el alias de la tabla serv_preventivo y lo uso para no tener que escribir su nombre completo, por ejemplo, pongo sv.unidad en lugar de serv_preventivo.unidad, eso sí después de haberlo asignado (lo que me obliga a usarlo siempre para esa tabla en esa consulta dentro del select donde se produce la asignación)
t1 es un alias, pero de una selección cuyos datos pasarían a formar parte de una tabla virtual.
Prueba a ver si ahora
Código sql:
Ver original
  1. SELECT sv.unidad, t1.maxi FROM serv_preventivo sv INNER JOIN
  2.     (SELECT unidad, MAX(engrasado) maxi FROM serv_preventivo GROUP BY unidad)t1
  3.      ON sv.unidad = t1.unidad AND T1.maxi = sv.engrasado ORDER BY sv.unidad

Última edición por jurena; 08/05/2009 a las 04:44
  #13 (permalink)  
Antiguo 07/05/2009, 14:39
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: seleccionar el ultimo registro

Muchas gracias, todo entendido
  #14 (permalink)  
Antiguo 12/05/2009, 18:54
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: seleccionar el ultimo registro

o.k... yo quiero hacer lago más o menos igual, pero mi problemilla es algo mas complejito, almenos para mi...
Bueno, yo tengo una tabla llamada contador y los campos son: id - int(10) Autoincrementable; y Contador int(10) Bien, lo que quiero hacer, es generar numeros de folio, usando:

$st = "ST";
$year = date("Y");

Ahora bien, lo que quiero es checar primeramente checar en la tabla contador, si el valor del campo contador = $contar, pero la verdad no tengo ni idea de como hacerlo, estoy tranado con esto:

$chek_Cuenta = "SELECT * FROM contador ORDER BY CONTADOR DESC LIMIT 1";
$num= mysql_query($chek_Cuenta, $conexion);
$res= mysql_fetch_array($num);
$contar= $res[0] + 0001;
$Folio = $ST.$Year.$contar;
echo "Folio: $Folio" ."<br>";
$sqlup = "SELECT * FROM contador WHERE id = $id";
$resulta = mysql_query($sqlup);
$conta_up = "UPDATE contador SET contador='$contar";
$resulta = mysql_query($conta_up);

y una vez que tengo el folio, me gustaría hacer un UPDATE del campo contador, para evitarme eso de estar incrementando los números, la idea es que me genere un folio más o menso así: ST20090001, y que se vaya incrementando, este folio, es para insertarlo en otras tablas...

No lo se, creoq ue estoy muuy enrredado, el foli que me muestra siempre es: ST20091, nunca cambia, además, me gustaría que fuera ST20090001 con todos los 4 digitos despues del año...
  #15 (permalink)  
Antiguo 15/05/2009, 12:17
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: seleccionar el ultimo registro

Que tal Jurena, de nuevo yo con otra duda a ver si me puedes ayudar.

Para obtener la fecha mas reciente entre los registros utilizamos
Cita:
SELECT sv.unidad, t1.maxi FROM serv_preventivo sv INNER JOIN (SELECT unidad, max(engrasado) maxi FROM serv_preventivo GROUP BY unidad)t1 ON sv.unidad = t1.unidad AND T1.maxi = sv.engrasado ORDER BY sv.unidad
entonces ahora con el resultado de esa fecha mas reciente para cada unidad necesito utilizarlo como componente en otra consulta, es decir

Cita:
select fecha, idlinea, idcamion, sec_to_time(sum((time_to_sec(timediff(HoraCierre,H oraSalida))))) as Horas from sir.t_salidas where fecha between curdate()-30 and curdate() group by idcamion, fecha order by idlinea, idcamion, fecha
en lugar de consultar de hace 30 dias, necesito que la fecha inicial sea el resultado de la consulta anterior. Que me recomiendan? Hacerlo en otra consulta separado o en la misma consulta se puede integrar?
Tomar en cuenta que la segunda consulta esta en otra base de datos.

Última edición por cestradah; 15/05/2009 a las 12:56
  #16 (permalink)  
Antiguo 16/05/2009, 20:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: seleccionar el ultimo registro

Tema trasladado desde MySQL

http://www.forosdelweb.com/f21/funci...-datos-413499/
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:55.