SQL Server 2014 - Maximos y minimos, agrupando valores por semana

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )
Responder
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1007
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

SQL Server 2014 - Maximos y minimos, agrupando valores por semana

Mensaje por Nagual »

Buenas tardes a todos
Deseo se encuentren bien

Nuevamente no se si debia poner el tema en programación o servidores...
La consulta que me autoimpuse como reto y estoy tratando de resolver, me esta costando, y es que quiero obtener el máximo y mínimo costo de un articulo por semana, buscando registros por mes...

Algo como

Movimiento, Fecha, Articulo, CostoMax, Movimiento, Fecha, Articulo, CostoMin

y encontré que tal vez la funcion DATEPART() que obtiene el numero de la semana (del año me imagino) podría servirme para agrupar datos por semana, el detalle es que en una semana puede haber varias capturas con el mismo costo, y en ese caso en vez de aparecerme todas las capturas, me aparezca la mas reciente...

La consulta base que tengo es la siguiente
select Compra.Mov,Compra.MovID, Compra.FechaRegistro, 
DATEPART(wk,Compra.FechaRegistro) as Semana, CompraD.Articulo, CompraD.Costo
from Compra
inner join CompraD on Compra.ID = CompraD.ID
and CompraD.Articulo = 'CG21'
and Compra.FechaRegistro between '2020/09/01' and '2020/09/22'
and Compra.Mov = 'Entrada Compra'
and Compra.Estatus = 'Concluido'
order by Compra.FechaRegistro

y el resultado que obtengo es como se ve en la siguiente imagen...

donde por ejemplo de la semana 37, quiero obtener como máximo $2,436 del movimiento SER5098, y como mínimo $1,930 del movimiento SER5096,
y en la semana 38 obtener como máximo $2,436 del movimiento SER5121, y como mínimo $1,930 del movimiento SER5107

Agradezco de antemano su orientación
(Seguiré experimentando)

Imagen
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax

Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1540
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.

Re: SQL Server 2014 - Maximos y minimos, agrupando valores por semana

Mensaje por maiku »

Hola compa, yo haría algo como esto:

Código: Seleccionar todo

select Semana, min(Costo),max(Costo) from 
(
select Compra.Mov,Compra.MovID, Compra.FechaRegistro, 
DATEPART(wk,Compra.FechaRegistro) as Semana, CompraD.Articulo, CompraD.Costo
from Compra
inner join CompraD on Compra.ID = CompraD.ID
and CompraD.Articulo = 'CG21'
and Compra.FechaRegistro between '2020/09/01' and '2020/09/22'
and Compra.Mov = 'Entrada Compra'
and Compra.Estatus = 'Concluido'
order by Compra.FechaRegistro
) 
group by semana
Aunque esa consulta te devuelve el mínimo y el máximo por número de semana (Si lo filtras para dos años o más ya no tendrá gracia), ahora bien, será que necesitas la fila con el máximo y el mínimo? es decir, todos los campos (Movimiento, Fecha, Articulo, CostoMax, Movimiento, Fecha, Articulo, CostoMin).

Me comentas si capto la idea.
Grüße...
Maiku

Full linux alchemist!!!

Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1007
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

Re: SQL Server 2014 - Maximos y minimos, agrupando valores por semana

Mensaje por Nagual »

Hola Maiku, muchas gracias si me sirve...
de hecho hice una modificación porque el código tal cual propones me marca un error, lo cambie a una que ya había hecho con PIVOT (por ahí anda en el foro)
with compras as
(
select Compra.Mov,Compra.MovID, Compra.FechaRegistro, 
DATEPART(wk,Compra.FechaRegistro) as Semana, CompraD.Articulo, CompraD.Costo
from Compra
inner join CompraD on Compra.ID = CompraD.ID
and CompraD.Articulo = 'CG21'
and Compra.FechaRegistro between '2020/09/01' and '2020/09/22'
and Compra.Mov = 'Entrada Compra'
and Compra.Estatus = 'Concluido'
) 
select  semana, MAX(Costo) AS MaxCosto, MIN(Costo) as MinCosto from Compras
group by semana
order by semana
Y el resultado me queda de este modo

Imagen

Si me sirve, pero de todas maneras voy a experimentar para obtener el valor máximo con el folio del movimiento y la fecha, y lo mismo con el mínimo, aunque quede en consultas separadas...
pretendo meter eso en una grafica de ChartJS para rastreo de movimientos, en lugar de ver una tabla con "chorrocientos" datos.

De nuevo, muchas gracias Maiku :) .
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax

Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1540
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.

Re: SQL Server 2014 - Maximos y minimos, agrupando valores por semana

Mensaje por maiku »

Excelente crack, nos cuentas cómo te va.

Para graficar me encanta Power BI xD.
Grüße...
Maiku

Full linux alchemist!!!

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje