none
Obtener precio de la venta más antigua RRS feed

  • Pregunta

  • Buenas tardes

    A ver si me podéis ayudar con una consulta en SQL Server, porque no veo como hacerla en un único paso.

    Tengo una tabla de ventas de artículos con una estructura como esta:

    Artículo   Fecha            Precio

    0001      01/01/2020   12

    0001      01/03/2020   10

    0001      01/06/2020   16

    0001      01/09/2020   11

    0001      01/12/2020   14

    0002      15/09/2020   20

    0002      15/11/2020   21

    0002      15/12/2020   15

    Y lo que necesito saber es el precio de la primera venta de cada artículo. El resultado tendría que ser algo como esto:

    0001      01/01/2020   12

    0002      15/09/2020   20

    Para obtener la fecha de la venta más antigua con el MIN(Fecha) y agrupando por artículo está claro que lo obtengo... ¿pero como saco el precio de esa venta? El MIN(Precio) no me sive porque me daría un precio que no equivale al de esa primera venta

    A ver si me podéis arrojar un poco de luz

    Un saludo y gracias anticipadas!

    martes, 2 de febrero de 2021 18:04

Respuestas

  • Hola JavierRomero:

    Una de las opciones más eficientes de cara a obtener lo que solicitas es utilizar la función de ventana RowNumber.

    Create table dbo.ventas_Art
    (Articulo varchar(4), Fecha date, Precio int)
    Go
    Set dateformat dmy;
    
    Insert into dbo.ventas_Art
    (Articulo, Fecha, Precio)
    values
    ('0001','01/01/2020',12),
    ('0001','01/03/2020',10),
    ('0001','01/06/2020',16),
    ('0001','01/09/2020',11),
    ('0001','01/12/2020',14),
    ('0002','15/09/2020',20),
    ('0002','15/11/2020',21),
    ('0002','15/12/2020',15);

    Podemos numerar las filas y quedarnos solo con la primera.

    ;With c as (
    	SELECT v.*,
    			ROW_NUMBER ()over(partition by v.articulo order by Fecha asc) as row
    			From dbo.ventas_Art v
    			)
    Select c.Articulo, c.Fecha, c.Precio from c
    where row =1

    La numeración se particiona por el código del artículo, y se ordena por la fecha en ascendente, por tanto solo nos quedamos con la primera fila.

    Numerar filas

    https://javifer2.wordpress.com/2019/11/11/row-number-numerar-filas/

    • Marcado como respuesta JavierRomero miércoles, 3 de febrero de 2021 10:02
    martes, 2 de febrero de 2021 21:54

Todas las respuestas

  • Si hace un select por MIN(fecha), MIN(precio), agrupado por articulo, ¿no te lo da?

    IIslas Master Consultant SQL Server

    martes, 2 de febrero de 2021 19:30
  • Hola JavierRomero:

    Una de las opciones más eficientes de cara a obtener lo que solicitas es utilizar la función de ventana RowNumber.

    Create table dbo.ventas_Art
    (Articulo varchar(4), Fecha date, Precio int)
    Go
    Set dateformat dmy;
    
    Insert into dbo.ventas_Art
    (Articulo, Fecha, Precio)
    values
    ('0001','01/01/2020',12),
    ('0001','01/03/2020',10),
    ('0001','01/06/2020',16),
    ('0001','01/09/2020',11),
    ('0001','01/12/2020',14),
    ('0002','15/09/2020',20),
    ('0002','15/11/2020',21),
    ('0002','15/12/2020',15);

    Podemos numerar las filas y quedarnos solo con la primera.

    ;With c as (
    	SELECT v.*,
    			ROW_NUMBER ()over(partition by v.articulo order by Fecha asc) as row
    			From dbo.ventas_Art v
    			)
    Select c.Articulo, c.Fecha, c.Precio from c
    where row =1

    La numeración se particiona por el código del artículo, y se ordena por la fecha en ascendente, por tanto solo nos quedamos con la primera fila.

    Numerar filas

    https://javifer2.wordpress.com/2019/11/11/row-number-numerar-filas/

    • Marcado como respuesta JavierRomero miércoles, 3 de febrero de 2021 10:02
    martes, 2 de febrero de 2021 21:54
  • Gracias por la respuesta!

    no, eso no me sirve porque el MIN(Fecha), MIN(Precio) por ejemplo para el artículo 001 me dará la fecha 01/01/2020 (que es correcto) pero en el precio me dará 10 (y este precio no corresponde a la venta del 01/01, sino que es el precio de la venta del 01/03)

    Yo necesito la venta más baja y el precio de esa venta, sea el precio que sea

    Saludos

    miércoles, 3 de febrero de 2021 9:42
  • Buenas Javi Fernández

    Esto es exactamente lo que necesitaba, muchas gracias por la ayuda!

    Un saludo!!!

    miércoles, 3 de febrero de 2021 10:01