Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/08/2007, 16:27
Avatar de Gabo77
Gabo77
 
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 18 años, 1 mes
Puntos: 6
Re: Cálculo de días transcurridos entre dos últimos pedidos

Cita:
Iniciado por carlangas07 Ver Mensaje
Había un leve error (marcado en negrita), pero corregido éste, al ejecutar la consulta me da el siguiente error:

No puede aparecer un agregado en la clausula WHERE si no es en una subconsulta contenida en una cláusula HAVING, o en una lista de selección, y siempre que la columna agregada sea una referencia externa.


Y la consulta se queda en esto:

Código:
SELECT     C.nombre, DATEDIFF([DAY], PMax.FechaPedido, PMin.FechaPedido) AS Diferencia
FROM         dbo.clientes C INNER JOIN
                          (SELECT     MAX(FechaPedido) AS FechaPedido, IdCliente
                            FROM          Pedidos P
                            GROUP BY P.IdCliente) PMax ON C.idcliente = PMax.IdCliente INNER JOIN
                          (SELECT     MAX(FechaPedido) AS FechaPedido, IdCliente
                            FROM          Pedidos P
                            WHERE      NOT EXISTS
                                                       (SELECT     1
                                                         FROM          Pedidos PA
                                                         WHERE      PA.IdCliente = P.IdCliente AND MAX(PA.FechaPedido) = P.FechaPedido
                                                         GROUP BY PA.IdCliente)
                            GROUP BY P.IdCliente) PMin ON C.idcliente = PMax.IdCliente
La verdad es que esto me sobrepasa bastante, tengo unos conocimientos muy limitados de SQL y no entiendo ni lo que me está diciendo el error.

Gracias de todas maneras, intentaré investigar a ver si encuentro la solución.


Ohh!! bueno, nadie es perfecto.... sobre todo yo!!
Sorry por la cageteada.... el error es sencillo de resolver.... espero que esto quede bien Saludos!


Código:
SELECT C.Nombre, DATEDIFF(DAY, PMax.FechaPedido, PMin.FechaPedido) AS Diferencia
FROM Clientes C
INNER JOIN (/*Esta sentencia me traerá el último pedido de cada cliente*/
    SELECT MAX(FechaPedido) AS FechaPedido, IdCliente
    FROM Pedidos P
    GROUP BY P.IdCliente
) AS PMax
    ON C.IdCliente = PMax.IdCiente
INNER JOIN (
    SELECT MAX(FechaPedido) AS FechaPedido, IdCliente
    FROM Pedidos P
    WHERE NOT EXISTS(/*Esta sentencia hara que no me considere el registro
            mayor y seleccione el segundo mayor, si es que existe*/
        SELECT 1
        FROM Pedidos PA
        WHERE PA.IdCliente = P.IdCliente
        HAVING MAX(PA.FechaPedido) = P.FechaPedido
        GROUP BY PA.IdCliente
    )
    GROUP BY P.IdCliente
) AS PMin
    ON C.IdCliente = PMax.IdCliente
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....