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

obtener solo la ultima fecha de compra

Estas en el tema de obtener solo la ultima fecha de compra en el foro de Bases de Datos General en Foros del Web. hola que tal. ojala me puedan ayudar mi problema es el siguiente: tengo esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT  cwtauxi . codaux ...
  #1 (permalink)  
Antiguo 01/08/2012, 16:29
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Exclamación obtener solo la ultima fecha de compra

hola que tal. ojala me puedan ayudar mi problema es el siguiente:

tengo esta consulta:
Código SQL:
Ver original
  1. SELECT  cwtauxi.codaux AS CODIGO, cwtauxi.nomaux AS NOMBRE,  
  2.                            cwtauxi.rutaux AS RUT, cwtauxi.diraux AS DIRECCION, cwtauxi.fonaux1 AS FONO ,
  3.                            cwtciud.ciudes AS CIUDAD, cwtvend.VenDes AS VENDEDOR, cwtzona.ZonDES AS ZONA , t2.*
  4.                        FROM ((((((cwtauxi
  5.                            LEFT JOIN cwtauxven ON cwtauxven.codaux = CWTauxi.codaux)
  6.                            LEFT JOIN cwtvend ON cwtvend.VenCod = cwtauxven.VenCod)
  7.                            LEFT JOIN cwtciud ON cwtciud.CiuCod = cwtauxi.CiuAux)
  8.                            LEFT JOIN cwtcvcl ON cwtcvcl.codaux = cwtauxi.codaux)
  9.                            LEFT JOIN  cwtzona ON cwtzona.ZonCod = cwtcvcl.CodZon)
  10.  LEFT JOIN
  11.  
  12. (SELECT  codaux , Fecha AS [ÚFecha]
  13. FROM  IW_GSAEN
  14.  WHERE iw_gsaen.tipo = 'F'  AND iw_gsaen.Estado = 'V'
  15.   ) AS t2 ON  cwtauxi.codaux  = t2.codaux)
  16.                        WHERE
  17.                           NOT EXISTS
  18.                             (SELECT iw_gsaen.codaux
  19.                            FROM iw_gsaen
  20.                            WHERE iw_gsaen.tipo = 'F'  AND iw_gsaen.Estado = 'V'
  21.                           AND iw_gsaen.fecha BETWEEN  #07/01/2012# AND #07/31/2012# AND iw_gsaen.codaux = cwtauxi.codaux  )
  22.                            AND NOT EXISTS
  23.                            (SELECT codaux
  24.                            FROM cwtauxclaneg
  25.                             WHERE cwtauxclaneg.codaux = cwtauxi.codaux)
  26.                         AND CWTAUXI.ACTAUX = 'S' AND cwtauxi.ClaCli = 'S'
  27.  
  28.                         ORDER BY cwtvend.VenDes, cwtciud.ciudes, cwtauxi.diraux

con la que logro los datos de clientes pero en el campo Ufecha, me salen todas las fechas en las que compro y necesito solamente la ultima, probe con:

Código SQL:
Ver original
  1. (SELECT  codaux , MAX(Fecha) AS [ÚFecha]
  2. FROM  IW_GSAEN
  3.  WHERE iw_gsaen.tipo = 'F'  AND iw_gsaen.Estado = 'V'
  4. ORDER BY fecha

pero me da un error:


ha intentado ejecutar una consulta que no incluye la expresion especificada 'cdaux' como parte de una funcion de agregado.

como puedo lograr que me muestre solamente la ultima fecha de compra ??

muuuuuuuuuuchas gracias
  #2 (permalink)  
Antiguo 01/08/2012, 17:23
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 solo la ultima fecha de compra

La sintaxis varía de acuerdo al DBMS usado...
¿Es SQL Server u otra cosa lo que estás usando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 01/08/2012, 22:59
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Respuesta: obtener solo la ultima fecha de compra

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La sintaxis varía de acuerdo al DBMS usado...
¿Es SQL Server u otra cosa lo que estás usando?
Uso Accesses
Gracias
  #4 (permalink)  
Antiguo 04/08/2012, 17:29
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Respuesta: obtener solo la ultima fecha de compra

alguien me puede ayudar porfa urgente!!!
  #5 (permalink)  
Antiguo 21/08/2012, 12:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: obtener solo la ultima fecha de compra

Hola carnero:

Vayamos por partes. Esta consulta:

Cita:
(SELECT codaux , max(Fecha) AS [ÚFecha]
FROM IW_GSAEN
WHERE iw_gsaen.tipo = 'F' *AND iw_gsaen.Estado = 'V'
ORDER BY fecha
Tiene un error, en primer lugar porque falta el paréntesis que cierra la consulta (que igual y pudo ser un error de copiar-pegar) pero sobre todo el error está en que no utilizas la función GROUP BY... si quieres obtener la última fecha para cada categoría tendrías que hacer algo como esto:

Código:
SELECT codaux , max(Fecha) AS [ÚFecha]
FROM IW_GSAEN
WHERE iw_gsaen.tipo = 'F' AND iw_gsaen.Estado = 'V' 
GROUP BY codaux
ORDER BY fecha
La consulta que pones es muy compleja como para entenderla sin una buena explicación. Aunque creo que tratar de explicar la consulta puede no resultar sencillo, así es que por lo menos trataré de explicarte algunas formas básicas para resolver el problema básico de obtener el último registro para cada grupo.

En realidad hay varias formas para resolver esta consulta, las más socorridas serían con una subconsulta o con INNER JOIN... pero veamos como sería más o menos y tratas de adecuarlo a lo que tienes. Supongamos que tienes una tabla con la siguiente información:

Código:
Id	|descripcion	|fecha		|cantidad
--------|---------------|---------------|----------
1	|uno		|21/08/2012	|10
2	|uno		|19/08/2012	|5
3	|uno		|20/08/2012	|11
4	|dos		|14/08/2012	|9
5	|dos		|19/08/2012	|4
6	|dos		|13/08/2012	|7
7	|tres		|21/12/2011	|4
8	|tres		|17/05/2012	|8
9	|tres		|13/08/2012	|12
En Access podrías hacer el último registro para cada descripción utilizando un JOIN:

Código:
SELECT T1.* FROM tabla T1 
INNER JOIN
(SELECT descripcion, max(fecha) as max_fecha 
FROM tabla GROUP BY descripcion) T2
ON T1.descripcion = T2.descripcion AND T1.fecha = T2.max_fecha
o utilizando una Subconsulta:

Código:
SELECT T1.*
FROM Tabla T1 
WHERE 
T1.fecha = (SELECT MAX(fecha)  FROM Tabla T2 
                 WHERE T1.descripcion = T2.descripcion)

Para ambos casos el resultado de la consulta sería

Código:
Id	|descripcion	|fecha		|cantidad
---------------------------------------------------
3	|uno		|21/08/2012	|10
7	|dos		|19/08/2012	|4
11	|tres		|13/08/2012	|12
Trata de implementar algo parecido en tu consulta, y ojalá puedas obtener el resultado esperado.

Saludos.
Leo.
  #6 (permalink)  
Antiguo 22/08/2012, 10:21
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Respuesta: obtener solo la ultima fecha de compra

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola carnero:

Vayamos por partes. Esta consulta:



Tiene un error, en primer lugar porque falta el paréntesis que cierra la consulta (que igual y pudo ser un error de copiar-pegar) pero sobre todo el error está en que no utilizas la función GROUP BY... si quieres obtener la última fecha para cada categoría tendrías que hacer algo como esto:

Código:
SELECT codaux , max(Fecha) AS [ÚFecha]
FROM IW_GSAEN
WHERE iw_gsaen.tipo = 'F' AND iw_gsaen.Estado = 'V' 
GROUP BY codaux
ORDER BY fecha
La consulta que pones es muy compleja como para entenderla sin una buena explicación. Aunque creo que tratar de explicar la consulta puede no resultar sencillo, así es que por lo menos trataré de explicarte algunas formas básicas para resolver el problema básico de obtener el último registro para cada grupo.

En realidad hay varias formas para resolver esta consulta, las más socorridas serían con una subconsulta o con INNER JOIN... pero veamos como sería más o menos y tratas de adecuarlo a lo que tienes. Supongamos que tienes una tabla con la siguiente información:

Código:
Id	|descripcion	|fecha		|cantidad
--------|---------------|---------------|----------
1	|uno		|21/08/2012	|10
2	|uno		|19/08/2012	|5
3	|uno		|20/08/2012	|11
4	|dos		|14/08/2012	|9
5	|dos		|19/08/2012	|4
6	|dos		|13/08/2012	|7
7	|tres		|21/12/2011	|4
8	|tres		|17/05/2012	|8
9	|tres		|13/08/2012	|12
En Access podrías hacer el último registro para cada descripción utilizando un JOIN:

Código:
SELECT T1.* FROM tabla T1 
INNER JOIN
(SELECT descripcion, max(fecha) as max_fecha 
FROM tabla GROUP BY descripcion) T2
ON T1.descripcion = T2.descripcion AND T1.fecha = T2.max_fecha
o utilizando una Subconsulta:

Código:
SELECT T1.*
FROM Tabla T1 
WHERE 
T1.fecha = (SELECT MAX(fecha)  FROM Tabla T2 
                 WHERE T1.descripcion = T2.descripcion)

Para ambos casos el resultado de la consulta sería

Código:
Id	|descripcion	|fecha		|cantidad
---------------------------------------------------
3	|uno		|21/08/2012	|10
7	|dos		|19/08/2012	|4
11	|tres		|13/08/2012	|12
Trata de implementar algo parecido en tu consulta, y ojalá puedas obtener el resultado esperado.

Saludos.
Leo.
Hola
muchas gracias por el interes, porfin alguien se intereso!

mira probe con esta consulta (antes ya habia hecho algo parecido)

Cita:
SELECT codaux , max(Fecha) AS [ÚFecha]
FROM IW_GSAEN
WHERE iw_gsaen.tipo = 'F' AND iw_gsaen.Estado = 'V'
GROUP BY codaux
ORDER BY fecha
y me entrega este error.



que significa??


otra cosa cuando la fecha es nula no la muestra, el problama es que
hay una tabla de clientes que pueden haber comprado o no en un rango de fecha, por lo tanto con esa consulta quedan fuera los que no compraron, ¿como los incluyo a la consulta?



muchas gracias denuevo

Última edición por carnero; 22/08/2012 a las 10:48
  #7 (permalink)  
Antiguo 22/08/2012, 12:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: obtener solo la ultima fecha de compra

Hola de nuevo carnero:

El problema con la consulta que estás tratando de ejecutar es el ORDER BY... en realidad no sirve para nada, y sólo produce el error que aparece... Al utilizar el campo fecha en el ORDER BY el motor está esperando que también lo listes en el GROUP BY... lo único que tienes que hacer es quitar eso:

Código:
SELECT codaux , max(Fecha) AS [ÚFecha]
FROM IW_GSAEN
WHERE iw_gsaen.tipo = 'F' AND iw_gsaen.Estado = 'V' 
GROUP BY codaux
Saludos
Leo.
  #8 (permalink)  
Antiguo 23/08/2012, 13:49
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Respuesta: obtener solo la ultima fecha de compra

muuuchas gracias leonardo_josue, logre lo que necesitaba gracias a tu ayuda!

Etiquetas: compra, der, fecha, ultimo, campos
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 14:30.