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

[SOLUCIONADO] Obtener ultimo ticket de un cliente

Estas en el tema de Obtener ultimo ticket de un cliente en el foro de Mysql en Foros del Web. Necesito obtener el ultimo ticket asociado a un cliente. Tengo una tabla de clientes, una de ticket y cliticket para una relacion varios a varios. ...
  #1 (permalink)  
Antiguo 24/09/2014, 01:17
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 12 años, 1 mes
Puntos: 1
Obtener ultimo ticket de un cliente

Necesito obtener el ultimo ticket asociado a un cliente. Tengo una tabla de clientes, una de ticket y cliticket para una relacion varios a varios. Entonces tengo fechae y horae. Quiero filtrar los 2 campos porque un cliente puede tener varias compras el mismo dia.

Código SQL:
Ver original
  1. SELECT ticket.idticket,ticket.numero,ticket.fechae,ticket.importe FROM ticket LEFT JOIN cliticket
  2. ON ticket.idticket=cliticket.idticket LEFT JOIN
  3. clientes ON cliticket.idcliente=clientes.idcliente WHERE clientes.idcliente=1
  4. HAVING MAX(ticket.fechae)
  5. ORDER BY ticket.horae DESC LIMIT 1 ;

Funciona pero no devuelve el ultimo... me pueden ayudar..
  #2 (permalink)  
Antiguo 24/09/2014, 02:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Obtener ultimo ticket de un cliente

Antes de intentar solucionarlo comentarte que deberías cambiar el tipo de fecahe a DATETIME y guardar en un solo campo la fecha y la hora del tiquet, eso nos mermitiria usar max sobre el momento exacto del ticket.

Si ticket.numero es único e incremental podemos apoyarnos en el.

Código MySQL:
Ver original
  1. SELECT ticket.idticket,
  2.        ticket.numero,
  3.        ticket.fechae,
  4.        ticket.importe
  5.     FROM ticket LEFT JOIN cliticket
  6.                     ON ticket.idticket=cliticket.idticket
  7.                 INNER JOIN (SELECT cliticket.idcliente,max(ticket.numero) mnumero
  8.                             FROM ticket LEFT JOIN cliticket
  9.                                                 ON ticket.idticket=cliticket.idticket
  10.                             GROUP BY cliticket.idcliente) Sbc
  11.                     ON ticket.numero=Sbc.mnumero
  12.                         AND cliticket.idcliente=Sbc.idcliente
  13.         WHERE cliticket.idcliente=1;

Si no lo es, único e incremental, di lo. En este caso se podria usar idticket que si lo será y si no di que tipo y/o formato tienen fechae y horae.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/09/2014, 11:19
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Obtener ultimo ticket de un cliente

No habia pensado lo del numero, el numero se obtiene del controlador fiscal, pero tranquilamente se lo puede hacer ocn el idticket, el ultimo idticket agrupado por idcliente, es el ultimo. Gracias
Hice:

Código MySQL:
Ver original
  1. select ticket.idticket,ticket.fechae, ticket.horae, ticket.numero from ticket where ticket.idticket in(
  2. select max(ticket.idticket)
  3.  from ticket left join cliticket on cliticket.idticket=ticket.idticket
  4.  left join clientes
  5.  on clientes.idcliente=cliticket.idcliente where clientes.idcliente=:idc);
Lo unico que me sucede es que me aparece el 30/12/1899 el 30 de diciembre de 1899 y no se porque ...

Última edición por giuli956; 25/09/2014 a las 11:38
  #4 (permalink)  
Antiguo 25/09/2014, 12:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Obtener ultimo ticket de un cliente

Cita:
Lo unico que me sucede es que me aparece el 30/12/1899 el 30 de diciembre de 1899 y no se porque ...
ALtamente probable que haya un error en el formato de la fecha...
¿En la tabla está definido cómo? ¿DATE, DATETIME, TIMESTAMP... o VARCHAR?
Si consultando en MySQL los datos están bien, el error está en el manejo de la fecha en la aplicación.
Hay que verificar ambas cosas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/09/2014, 15:58
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Obtener ultimo ticket de un cliente

Cita:
Iniciado por gnzsoloyo Ver Mensaje
ALtamente probable que haya un error en el formato de la fecha...
¿En la tabla está definido cómo? ¿DATE, DATETIME, TIMESTAMP... o VARCHAR?
Si consultando en MySQL los datos están bien, el error está en el manejo de la fecha en la aplicación.
Hay que verificar ambas cosas.
Gracias estaba usando datatimetostring y es timetostring. Estoy programando en delphi
  #6 (permalink)  
Antiguo 25/09/2014, 16:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Obtener ultimo ticket de un cliente

En realidad yo hablaba de la tabla en la base.
El lenguaje de programación es irrelevante en este foro.
Mi duda era por los datos almacenados, que pueden tener que devolverse en una forma específica a la aplicación. Y para eso MySQL tiene funciones potentes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, cliente, join, select, tabla, ticket, 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 04:09.