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

Query:El ultimo dato ingresado

Estas en el tema de Query:El ultimo dato ingresado en el foro de Mysql en Foros del Web. Saludos: Tengo una tabla de clientes y otra de servicios donde registro los servicios prestados a determiando cliente (fecha, tipo servicio,persona que atendio, etc). la ...
  #1 (permalink)  
Antiguo 10/07/2006, 02:34
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
Query:El ultimo dato ingresado

Saludos:
Tengo una tabla de clientes y otra de servicios donde registro los servicios prestados a determiando cliente (fecha, tipo servicio,persona que atendio, etc).
la estructura de la tabla sericios es mas o menos asi:

inst(PK) - autoincrement
idserv(INDEX)
sec
idcliente

el idserv me muestra el codigo del primer servicio que se hizo a un cliente, para este caso memuestra SEC=1, para un segundo servicio toma el mismo idserv y el SEC=2, para un tercer servicio SEC=3 y asi sucesivamente.
Lo que deseo es que para cada caso, me muestre el idinst con el ultimo servicio realizado a cada cliente, osea el max(SEC) , pero no logro obtener esa fila unicamente.

Esto es lo que estoy usando:
Código PHP:
select s.idservc.nombremax(s.sec), s.fechas.horac.direccion
from servicios s
cliente c
where s
.cliente c.idcliente
group by s
.idserv
order by s
.fecha desc 
__________________
:adios:
  #2 (permalink)  
Antiguo 10/07/2006, 16:47
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
gracias rrufo, pero con eso solo sonsigo el ultimo insert a mi tabla, y lo que necesito es el ultimo insert a cada idserv...
Alguna otra sugerencia,
gracias!!
__________________
:adios:
  #3 (permalink)  
Antiguo 11/07/2006, 02:06
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
Voy a intentar darte alguna idea, en MySQL no se si se podra que llevo apenas unos días trabanjando con ella. En Oracle se podría hacer algo parecido a esto a ver si te sirve o te da alguna idea:

Código:
SELECT s.idserv, c.nombre, s.sec, s.fecha, s.hora, c.direccion
FROM servicios s, cliente c
WHERE s.cliente = c.idcliente
 AND (s.sec,s.cliente,s.idserv) in (SELECT MAX(s1.sec),s1.cliente,s1.idserv
                           FROM servicios s1
                           WHERE s1.idserv=s.idserv
                              AND s.cliente=s1.cliente
                              AND s.idserv=s1.idserv
                            GROUP BY S1.CLIENTE,s1.idserv)
Con esto se mostraría el último servicio que se ha realizado por cliente y tipo de servicio.
  #4 (permalink)  
Antiguo 11/07/2006, 03:14
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
De acuerdo problema con version

Gracias seanchan!
te cuento que en mysql 4.1* (servidor local) la consulta funciona uy bien, , pero a la hora de subirla a mi servidor web mysql 4.0* me envia un mensaje de error:
Código PHP:
#1064 - You have an error in your SQL syntax.
  
Check the manual that corresponds to your MySQL server version for the right syntax to use near:
  
idcomercio idinst  )  IN (   SELECT MAXs1 sec 
la consulta finalmente quedo de la sgte manera, tuve que hacer algunos cambios a los nombres de las tablas y campos, pero la idea es la misma:
Código:
SELECT s.idinst, c.nombre, s.sec, s.fecha, s.h_inicio, c.direccion
FROM instalaciones s, comercios c
WHERE s.idcomercio = c.idcomercio
AND (

s.sec, s.idcomercio, s.idinst
)
IN (

SELECT MAX( s1.sec ) , s1.idcomercio, s1.idinst
FROM instalaciones s1
WHERE s1.idinst = s.idinst
AND s.idcomercio = s1.idcomercio
AND s.idinst = s1.idinst
AND s.fecha IS NOT NULL 
GROUP BY S1.idcomercio, s1.idinst
)
alguna sugerencia al respecto???
De verdad te agradezco mucho por la ayuda, llevo desde la tarde dandole vueltas a este tema.
__________________
:adios:
  #5 (permalink)  
Antiguo 11/07/2006, 03:34
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
En la version 4.0 de MySQL no puedes usar subconsultas, no puedes actualizarlo en tu servidor o pedir que te la actualicen?
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #6 (permalink)  
Antiguo 11/07/2006, 03:44
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
Pues de momento lo he pedido, pero no se cuando me lo actualicen, si es que lo hacen.
Qué otra solución habria a mi consulta??? con lo que me indico seanchan funciona muy bien, pero esta el problema de la subconsulta.
__________________
:adios:
  #7 (permalink)  
Antiguo 11/07/2006, 04:20
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
miglos, no se que problema tienes... he probado el primer ejemplo que has puesto y funciona perfectamente, saca el maximo "sec" de cada grupo.

O no buscas eso? que quieres obtener?
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #8 (permalink)  
Antiguo 11/07/2006, 04:24
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
Hmmm..algo mas o menos asi???

$var = array--->"select distinct(idinst) from instalaciones"

foreach $var as idinst
{
select max(sec), etc..
from instalaciones, comercios
where idinst=$var

echo $row[fecha],nombre, etc..
}
__________________
:adios:
  #9 (permalink)  
Antiguo 11/07/2006, 04:30
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
Asi es OskarL, eso es lo que quiero obtener.
Pero no se porqué, me muestra el max(sec) para cada grupo pero me muestra la fecha del sec(1), espero haberme explicado.
Por ejemplo:

idinst - sec - fecha
1001 - 1 - 05/06/2006
1001 - 2 - 15/06/2006
1001 - 3 - 05/07/2006
1001 - 4 - 10/07/2006

al ejecutar la consulta me bota
1001 - 4 - 05/06/2006
__________________
:adios:

Última edición por miglos; 11/07/2006 a las 04:35
  #10 (permalink)  
Antiguo 11/07/2006, 04:40
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
se me ocurre ahora....

Código HTML:
SELECT s.idinst, c.nombre, max( s.sec ) , max( s.fecha ) , s.h_inicio, c.direccion
FROM instalaciones s, comercios c
WHERE s.idcomercio = c.idcomercio
AND fecha IS NOT NULL 
GROUP BY s.idinst
ORDER BY s.fecha DESC
no resulta!, es decir, muestra las ultimas fechas(en desorden), pero el resto de detalles los sigue asociando al sec(1).
__________________
:adios:

Última edición por miglos; 11/07/2006 a las 05:17
  #11 (permalink)  
Antiguo 12/07/2006, 10:23
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
alguna sugerencia por favor???? o alguna explicacion de porque me muestra el dato asociado al sec(1) ???
quizas esta mal hecha mi tabla?
__________________
:adios:
  #12 (permalink)  
Antiguo 13/07/2006, 01:54
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
No es cosa de tu tabla, yo me he creado una para probar, y me pasa lo mismo (aunque tambien puede ser que hayamos cometido el mismo error al crearla, pero weno, jeje)

Le he estado dando vueltas, y creo que la unica solucion en este caso es la subconsulta...
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #13 (permalink)  
Antiguo 13/07/2006, 03:45
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
Si no sacas el campo s.h_inicio prueba con esta a ver:
Código:
SELECT s.idinst, c.nombre, max( s.sec )  as maxSec, max( s.fecha ) as Fecha , c.direccion
FROM instalaciones s, comercios c
WHERE s.idcomercio = c.idcomercio
AND fecha IS NOT NULL 
GROUP BY s.idinst, c.nombre,c.direccion
ORDER BY fecha DESC
Si no puedes actualizar la version de MySQL, puedes mirar de hacer la subconsulta la guardas en una tabla temporal y haces la otra SQL. He visto que en MySQL hay TEMPORARY TABLE, para crear tablas temporales, pero no se como se utilizan, si alguien lo ha hecho que comente algo.

Otra opción sería lanzar la subconsulta, leerla en PHP, y en base a los resultados obtenidos montar el WHERE para la segunda Consulta.

Cualquiera de estas opciones es un trabajo...
  #14 (permalink)  
Antiguo 19/07/2006, 10:41
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 2 meses
Puntos: 1
Saludos!
Por motivos de viaje no pude responder inmediatamente y aclarar como quedo solucionado el tema.
Con la ultima colaboracion de seanchan, el tema quedo solucionado y todo funciona muy bien, solo me queda esperar la actualizacion de mi base de datos, imagino que en temas de rendimiento, es mejor usar las subconsultas.

Muchas gracias nuevamente!!
__________________
:adios:
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 00:45.