none
Listar ultima venta de cada cliente - SQL RRS feed

  • Pregunta

  • Hola a todos,

    Tengo una tabla de ventas de unidades con campo Fecha, Cliente, Monto.

    Lo que necesito es una consulta en sql que me liste a cada cliente con su ultima venta por medio de la fecha, cada cliente tiene varias ventas con fechas diferentes. Ya he estado buscando pero no he dado con lo que quiero ya que la debo integrar a otras consultas.

    Gracias por su apoyo.

    martes, 29 de enero de 2019 21:08

Respuestas

  • Hola:

    Otra opción con el operador Cross Apply

    SELECT DISTINCT 
           v.cliente, 
           ap.fecha, 
           ap.Monto, 
           ap.idVenta
    FROM ventas v
         CROSS APPLY
    (
        SELECT TOP (1) a.fecha, 
                       a.Monto, 
                       a.idVenta
        FROM ventas a
        WHERE a.cliente = v.cliente
        ORDER BY a.fecha DESC
    ) AS ap;
    

    • Marcado como respuesta Ariel Reyes martes, 29 de enero de 2019 22:37
    martes, 29 de enero de 2019 22:29

Todas las respuestas

  • Hola Ariel Reyes:

    create table Ventas (idVenta int identity(1,1), fecha datetime, cliente int, Monto float)
    go
    insert into Ventas (fecha, cliente, Monto)
    values
    ('20190101',1,100.52),
    ('20190102',1,100),
    ('20190103',1,200),
    ('20190101',2,155.52),
    ('20190102',2,133.52),
    ('20190101',3,127.52),
    ('20190103',3,100.52),
    ('20190101',4,99.52),
    ('20190102',4,100.52),
    ('20190104',4,540.52);
    /* fin de escenario */
    SELECT o.idVenta, 
           o.fecha, 
           o.cliente, 
           o.Monto
    FROM
    (
        SELECT idVenta, 
               ROW_NUMBER() OVER(PARTITION BY cliente
               ORDER BY fecha DESC) AS FILA, 
               FECHA, 
               cliente, 
               Monto
        FROM Ventas
    ) AS o
    WHERE o.fila = 1;

    Esto te podría servir.

    Salida:

    https://javifer2.blogspot.com/2019/01/numerar-filas-funciones-de-ventana.html

    martes, 29 de enero de 2019 21:49
  • Hola:

    Otra opción con el operador Cross Apply

    SELECT DISTINCT 
           v.cliente, 
           ap.fecha, 
           ap.Monto, 
           ap.idVenta
    FROM ventas v
         CROSS APPLY
    (
        SELECT TOP (1) a.fecha, 
                       a.Monto, 
                       a.idVenta
        FROM ventas a
        WHERE a.cliente = v.cliente
        ORDER BY a.fecha DESC
    ) AS ap;
    

    • Marcado como respuesta Ariel Reyes martes, 29 de enero de 2019 22:37
    martes, 29 de enero de 2019 22:29
  • Gracias estimado por tu apoyo, como siempre muy útil.

    Saludes!

    martes, 29 de enero de 2019 22:37