none
Obtener los ultimos pedidos realizados por fecha RRS feed

  • Pregunta

  • Hola,

    Buenas tardes a todos, espero me puedan colaborar en una consulta donde requiero obtener los ultimos pedidos realizados por los clientes, la estructura de mi bd es la siguiente, favor le pido me puedan colaborar, intente con el siguiente consulta pero los resultados no son los addecuados, utilizo sql server 2005 express.

    SELECT     C1.CodigoCliente, C1.Paterno + ' ' + C1.Materno + ' ' + C1.Nombres AS NCOmpleto,dbo.PRODUCTOS.NombreProducto, 
                MAX(O1.FechayHoraPedido) AS ULPedido, DATEDIFF(DAY, MAX(O1.fechayhorapedido), getdate()) as transcurrido, (CASE WHEN PRODUCTOS.codigoproducto=32 THEN DATEADD(DAY, 7, MAX(O1.fechayhorapedido)) ELSE DATEADD(MONTH, 1, MAX(O1.fechayhorapedido)) end) AS Proximo, 
                C1.celular,C1.telefono,C1.nombrenegocio, CAST( C1.Direccion AS nvarchar(250)) as Direccion
    FROM         dbo.PEDIDOS AS O1 INNER JOIN
                          dbo.CLIENTES AS C1 ON O1.CodigoCliente = C1.CodigoCliente INNER JOIN
                          dbo.DETALLEPEDIDOS ON O1.CodigoPedido = dbo.DETALLEPEDIDOS.codigopedido INNER JOIN
                          dbo.PRODUCTOS ON dbo.DETALLEPEDIDOS.codigoproducto = dbo.PRODUCTOS.CodigoProducto
    GROUP BY C1.CodigoCliente, C1.Paterno, C1.Materno, C1.Nombres, dbo.PRODUCTOS.NombreProducto,C1.celular,C1.telefono,C1.nombrenegocio,CAST( C1.Direccion AS nvarchar(250)),productos.codigoproducto
    ORDER BY ULPedido DESC

    Cliente
    CodigoCliente ! Nombres ..etc
      5          ! AA    
     20          ! BB
     21          ! CC
    100          ! DD

    productos
    CodigoProducto ! Nombre
    1           !   P1
    2           !   P2
    3           !   P3
           
    pedidos
    CodigoPedido ! FechaPedido !CodigoCliente
    10         !    10/11/2011 !     5
    11         !    10/11/2011 !    20
    12         !     18/11/2011 !    21
    13         !    20/11/2011 !    50
    14         !    21/11/2011 !    20
    15         !    30/11/2011 !   100

    detallePedidos
    CodigoPedido ! CodigoProducto ! Cantidad ! Precio ! Total
    10         !      1          !    5     ! 10      !  50
    11         !      1          !    1     ! 10      !  10
    11         !      2          !    1     ! 5      !  5
    12         !      3          !    1     ! 1      !  1
    13         !      1          !    2     ! 2      !  10
    13         !      2          !    10     ! 5      !  50
    14         !      1          !    1     ! 2      !  10
    14         !      2          !    5     ! 5      !  50
    14         !      3          !    2     ! 2      !   4
    15         !      1          !    1     ! 10      !  10


    Consulta que se require obtener
    Codigocliente ! NombreProducto ! Cantidad ! FechaPedido(UltimoPedido) ! FechaProximoPedido    ! CodigoPedido
    20          !  P1           !   1      !   21/11/2011          ! 21/12/2011          !  14
    20          !  P2           !   5      !   21/11/2011          ! 28/11/2011          !  14
    20          !  P3           !   2      !   21/11/2011          ! 21/12/2011          !  14
    100        !  P1           !   1      !   30/11/2011          ! 30/12/2011          !  15
    50          !  P1           !   2      !   21/11/2011          ! 21/12/2011          !  13
    50          !  P2           !   10    !   20/11/2011          ! 27/11/2011          !  13

     

    Agradezco de antemano su colaboracion.

    Atte.

    Pedro

    miércoles, 21 de diciembre de 2011 20:48

Respuestas

  • Trata esto:

    select 
    p.CodigoCliente,pr.Nombre as NombreProducto,
    dp.Cantidad,
    p.FechaPedido as UltimoPedido, 
    p.CodigoPedido
    from Pedidos p 
    	inner join DetallePedidos dp on p.CodigoPedido=dp.CodigoPedido
    	inner join Productos pr on dp.CodigoProducto=pr.CodigoProducto
    	inner join 
    	(select p.CodigoCliente,MAX(p.FechaPedido) as MaxFecha from Pedidos p group by p.CodigoCliente ) t 
    		on t.CodigoCliente = p.CodigoCliente and t.MaxFecha = p.FechaPedido
    
    


    • Marcado como respuesta D. Pedro jueves, 22 de diciembre de 2011 14:47
    miércoles, 21 de diciembre de 2011 22:35

Todas las respuestas

  • Trata usando una CTE y la funcion de rango ROW_NUMBER.

    with R as (
    SELECT
        *, -- poner aqui las columnas que se desean seleccionar
        row_number() over(partition by P.CodigoCliente order by FechaPedido DESC) as rn
    FROM        
        dbo.PEDIDOS AS P
        INNER JOIN
        dbo.CLIENTES AS C 
        ON P.CodigoCliente = C.CodigoCliente
        INNER JOIN
        dbo.DETALLEPEDIDOS  AS DP
        ON P.CodigoPedido = DP.codigopedido
        INNER JOIN
        dbo.PRODUCTOS AS PR
        ON DP.codigoproducto = PR.CodigoProducto
    )
    select *
    from R
    where rn = 1
    order by ...;

     


    AMB

    Some guidelines for posting questions...

    miércoles, 21 de diciembre de 2011 22:19
  • Trata esto:

    select 
    p.CodigoCliente,pr.Nombre as NombreProducto,
    dp.Cantidad,
    p.FechaPedido as UltimoPedido, 
    p.CodigoPedido
    from Pedidos p 
    	inner join DetallePedidos dp on p.CodigoPedido=dp.CodigoPedido
    	inner join Productos pr on dp.CodigoProducto=pr.CodigoProducto
    	inner join 
    	(select p.CodigoCliente,MAX(p.FechaPedido) as MaxFecha from Pedidos p group by p.CodigoCliente ) t 
    		on t.CodigoCliente = p.CodigoCliente and t.MaxFecha = p.FechaPedido
    
    


    • Marcado como respuesta D. Pedro jueves, 22 de diciembre de 2011 14:47
    miércoles, 21 de diciembre de 2011 22:35
  • ok gracias probare las dos opciones y les comento.
    jueves, 22 de diciembre de 2011 13:01
  • gracias a ambos por la ayuda me sirvio de mucho.
    jueves, 22 de diciembre de 2011 14:47