Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/07/2007, 11:43
carlangas07
 
Fecha de Ingreso: febrero-2007
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Cálculo de días transcurridos entre dos últimos pedidos

Cita:
Iniciado por Gabo77 Ver Mensaje
Quizas esto te ayude:
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.IdCliente
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
            AND MAX(PA.FechaPedido) = P.FechaPedido
        GROUP BY PA.IdCliente
    )
    GROUP BY P.IdCliente
) AS PMin
    ON C.IdCliente = PMax.IdCliente
No la probe, así que uizas tenga uno que otro errorcillo, además de que no se la estructura de tus tablas


Saludos!
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.