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

Ayuda con consulta

Estas en el tema de Ayuda con consulta en el foro de Mysql en Foros del Web. Buenas Estoy haciendo una consulta con dos tablas VENTA y CLIENTE CLIENTE(id_cliente, nombre) 1, maria 2, carlos 3, josé 4, ricardo VENTA(id_venta, id_cliente) 1, 2 ...
  #1 (permalink)  
Antiguo 01/07/2009, 09:55
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Ayuda con consulta

Buenas
Estoy haciendo una consulta con dos tablas VENTA y CLIENTE

CLIENTE(id_cliente, nombre)
1, maria
2, carlos
3, josé
4, ricardo

VENTA(id_venta, id_cliente)
1, 2 ===> carlos
2, 1 ===> maria
3, 2 ===> carlos
4, 3 ===> ricardo
5, 2 ===> carlos

Ahora lo que necesito es hacer una lista de las últimas ventas hechas de cada cliente, que aparesca esto
id_venta - - - - id_cliente - - - - nombre
-----2------------1----------maria
-----4------------3----------ricardo
-----5------------2----------carlos

y no lo he logrado esta es la consulta que hago

Cita:
select max(v.id_venta) as id_venta, c.id_cliente, c.nombre
from cliente c, venta v
where c.id_cliente=v.id_cliente
group by c.id_cliente.
y lo que hace esta consulta si es mostrarme las ventas por los clientes pero no las ultimas ventas sino las primeras y lo que quiero lograr es mostrar las ultimas ventas.

Última edición por gersveo; 01/07/2009 a las 10:04
  #2 (permalink)  
Antiguo 01/07/2009, 10:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con consulta

Código sql:
Ver original
  1. SELECT MAX(v.id_venta),c.id,c.nombre FROM clientes c INNER JOIN venta v ON c.id=v.id_cliente GROUP BY c.id;

Por que dices que no te funciona?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 01/07/2009, 11:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda con consulta

Tal vez así (no lo he probado):
SELECT t1.idventa, t1.id_cliente, CLIENTE.nombre FROM (SELECT id_venta, id_cliente FROM VENTA ORDER BY id_venta DESC, id_cliente)t1 INNER JOIN CLIENTE ON CLIENTE.id_cliente = t1.id_cliente GROUP BY t1.id_cliente
  #4 (permalink)  
Antiguo 01/07/2009, 14:33
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda con consulta

Cita:
Iniciado por huesos52 Ver Mensaje
Código sql:
Ver original
  1. SELECT MAX(v.id_venta),c.id,c.nombre FROM clientes c INNER JOIN venta v ON c.id=v.id_cliente GROUP BY c.id;

Por que dices que no te funciona?
VENTA(id_venta, id_cliente, fecha)
1, 2, 2009/02/25 ===> carlos
2, 1, 2009/02/26===> maria
3, 2, 2009/02/26===> carlos
4, 3, 2009/02/27===> ricardo
5, 2, 2009/02/28===> carlos

Código sql:
Ver original
  1. SELECT MAX(v.id_venta) AS id_venta_MAX, v.fecha, c.id_cliente, c.nombre
  2. FROM clientes c INNER JOIN venta v ON c.id=v.id_cliente
  3. GROUP BY c.id;

modificando un poco el sql esto es lo que me imprime
id_venta_MAX - - - - - fecha - - - - - - id_cliente - - - - - - nombre
- - - - 2 - - - - - - - - 2009/02/26 - - - - 1 - - - - - - - - - maria
- - - - 5 - - - - - - - - 2009/02/25 - - - - 2 - - - - - - - - - carlos ====>>aqui esta mal la fecha
- - - - 3 - - - - - - - - 2009/02/27 - - - - 3 - - - - - - - - - ricardo

me devuelve la fecha del primer registro de la primera venta hecha a ese cliente

Última edición por gersveo; 01/07/2009 a las 14:43
  #5 (permalink)  
Antiguo 01/07/2009, 14:43
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda con consulta

Cita:
Iniciado por jurena Ver Mensaje
Tal vez así (no lo he probado):
SELECT t1.idventa, t1.id_cliente, CLIENTE.nombre FROM (SELECT id_venta, id_cliente FROM VENTA ORDER BY id_venta DESC, id_cliente)t1 INNER JOIN CLIENTE ON CLIENTE.id_cliente = t1.id_cliente GROUP BY t1.id_cliente
Este sql solo me imprime un registro, no es el ultimo ni el primer registro.
  #6 (permalink)  
Antiguo 01/07/2009, 17:02
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda con consulta

Por favor si alguien tiene otra idea ayundenme
al principio creí que era una consulta comun y sonriente
pero era dura la hijuemadre.
  #7 (permalink)  
Antiguo 01/07/2009, 17:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con consulta

tu problema es similar a este
http://www.forosdelweb.com/f86/neces...nsulta-711028/

La ultima respuesta (Autorespuesta) realizada por euge me pareció muy ingeniosa.
Sin embargo, existen otras opciones un poco mas complejas y sin mucha estética.

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 02/07/2009, 00:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda con consulta

select t1.venta, t1.fecha, t1.idcliente, t1.nombre FROM (select venta.id_venta venta, venta.fecha fecha, venta.id_cliente idcliente, cliente.nombre nombre FROM venta INNER JOIN cliente ON cliente.id_cliente = venta.id_cliente ORDER BY venta.fecha DESC)t1 group by t1.idcliente order by t1.idcliente

puedes ordenar dentro de la subconsulta por fecha o por id_venta. Yo he preferido hacerlo por fecha. Al final también he ordenado por número de cliente, pero igualmente puedes hacerlo por nombre ... order by t1.nombre, en lugar de order by t1.idcliente como tienes al final.

Última edición por jurena; 02/07/2009 a las 01:01
  #9 (permalink)  
Antiguo 02/07/2009, 07:03
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda con consulta

Cita:
Iniciado por jurena Ver Mensaje
select t1.venta, t1.fecha, t1.idcliente, t1.nombre FROM (select venta.id_venta venta, venta.fecha fecha, venta.id_cliente idcliente, cliente.nombre nombre FROM venta INNER JOIN cliente ON cliente.id_cliente = venta.id_cliente ORDER BY venta.fecha DESC)t1 group by t1.idcliente order by t1.idcliente

puedes ordenar dentro de la subconsulta por fecha o por id_venta. Yo he preferido hacerlo por fecha. Al final también he ordenado por número de cliente, pero igualmente puedes hacerlo por nombre ... order by t1.nombre, en lugar de order by t1.idcliente como tienes al final.
Usé esta consulta y me resultó bien. Gracias por la ayuda de todos.
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 10:16.