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

Cálculo de días transcurridos entre dos últimos pedidos

Estas en el tema de Cálculo de días transcurridos entre dos últimos pedidos en el foro de SQL Server en Foros del Web. Tengo dos tablas: Clientes y Pedidos y quiero hallar la diferencia de días de los dos últimos pedidos de todos los clientes. (en caso de ...
  #1 (permalink)  
Antiguo 28/06/2007, 06:55
 
Fecha de Ingreso: febrero-2007
Mensajes: 12
Antigüedad: 17 años, 3 meses
Puntos: 0
Cálculo de días transcurridos entre dos últimos pedidos

Tengo dos tablas: Clientes y Pedidos y quiero hallar la diferencia de días de los dos últimos pedidos de todos los clientes. (en caso de que tengan dos o más pedidos, evidentemente)

Me gustaría almacenar el valor en un campo de la tabla Clientes para así tener dicha información más a mano, recorriendo todos los registros mediante un procedimiento almacenado que se ejecutaría a la hora de crear unos informes.

¿es sencillo?

Gracias de antemano
  #2 (permalink)  
Antiguo 30/06/2007, 17:54
Avatar de tomerqueves  
Fecha de Ingreso: marzo-2005
Ubicación: algeciras (cadiz)
Mensajes: 200
Antigüedad: 19 años, 1 mes
Puntos: 7
Re: Cálculo de días transcurridos entre dos últimos pedidos

Sí es muy sencillo. Yo de antemano te digo que quizás no sabría hacerlo en la práctica pero en teoría es sencillamente un campo calculado.
en teoría el campo tres sería el resultado de al campo dos restarle el campo uno(sin entrar en la condición de k las fechas sean validas y dos.)

Yo se hacerlo en acces :D. En sql server con el editor de consultas debe ser tambien sencillito.
__________________
A todos los moderadores y admiinistradores. Si algun día me banean, por favor devolverme la carita de mi avatar
  #3 (permalink)  
Antiguo 01/07/2007, 10:20
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Cálculo de días transcurridos entre dos últimos pedidos

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.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
            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!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....

Última edición por Gabo77; 01/07/2007 a las 10:24 Razón: Jeje, despues de todo si tenia error.... :p
  #4 (permalink)  
Antiguo 01/07/2007, 11:43
 
Fecha de Ingreso: febrero-2007
Mensajes: 12
Antigüedad: 17 años, 3 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.
  #5 (permalink)  
Antiguo 22/08/2007, 11:20
 
Fecha de Ingreso: agosto-2007
Mensajes: 1
Antigüedad: 16 años, 8 meses
Puntos: 0
De acuerdo Re: Cálculo de días transcurridos entre dos últimos pedidos

Amiwo tomerqueves, dices tu esa diferencia lo puedes hacer en acces, yo tengo un problema similar, me gustaría que expusieras tu posible solución, como explicó carlangas07 no todos tienen la misma cantidad de pedidos, como harías esto en access???
  #6 (permalink)  
Antiguo 22/08/2007, 16:27
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
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....
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 15:57.