Semanas en SQL ¿Cómo definirlo?

Este tema puede ser interesante para todos…

Resulta que tengo varios reportes que realizan los calculos de producción, ventas y demás por semanas.
Para esto normalmente utilizo en SQL
SELECT DATEPART(week, FECHA)
Esto me dice si es semana 1, 2, 3…

Ahora bien… Resulta que en SQL actualmente estamos en la Semana 4 del año del 18/01/2021 al 24/01/2021 puesto que está tomando del 01/01/2021 al 03/01/2021 como la semana 1.

Sin embargo manufactura, ventas y administración, indican que está mal, que realmente estamos en la semana 3, porque la semana 1 empezó el 04/01/2021 (Para mí, programador significa que los días 1, 2 y 3 entonces no existieron?).

Y esto lo están refutando con muchas páginas de google que dicen lo mismo. (Ejemplos ht_ps://numerodesemana.mx/1
ht_ps://espanol.epochconverter.com/numero-de-semana#:~:text=Semana%2003,este%20a%C3%B1o%20hay%2052%20semanas. )

Para mí es tan “fácil” como ponerle que la semana mostrada es = semana -1, pero el problema está si luego quieren usar el reporte para los años anteriores, lo que no facilita mucho la cosa…

¿A alguno le ha pasado esto?. ¿Cómo lo hablaron con sus áreas y como lo resolvieron?

(ya estoy evaluando actualizar los querys a datepart(ISOWK, Fecha) Pero estoy evaluando como pega esto en los reportes.

1 me gusta

Hola

tengo un caso parecido, y la solución fue utilizar la función DATEPART(DAY, @fecha) y si era menor de cuatro, devolver 53 como semana y 2020 como año. En caso contrario, consideramos la semana actual, es cierto que tengo una tabla auxiliar con las semanas definidas en mi aplicación. Y también se guarda en esta tabla en qué mes la quiero incluir en los informes, para que todo sea más sencillo.

Un saludo
Agustín

1 me gusta

Es una gran incógnita existencial para muchos programadores amigo. Si encuentras la solución, avisanos.

1 me gusta

A nivel de programación ya lo tengo resuelto Revisen este query para que vean los resultados de la ISO_Week actual y del Week en SQL y en base a eso es solo llegar al acuerdo con las áreas de cual utilizarán.

SELECT
  getdate() 'fecha actual',
 datepart(ISOWK, Getdate()) AS isoWK,
 datepart(ISO_WEEK, Getdate()) AS ISO_WEEK,
  datepart(YEAR, Getdate()) AS Año,
  datepart(Week, Getdate()) AS Semana,
   cast('01/01/2021' as date) fecha,
 datepart(ISOWK, '01/01/2021') AS 'isoWK-2',
 datepart(ISO_WEEK, '01/01/2021') AS 'ISO_WEEK2',
  datepart(YEAR, '01/01/2021') AS 'Año-2',
  datepart(Week, '01/01/2021') AS 'Semana-2'

La cosa está en como negociar usar una u otra, porque ahora resulta que no quieren que cambie los reportes de años anteriores pero este si lo quieren distinto. entonces no logro llegar a un acuerdo, porque la forma sería hacerles 2 reportes y tampoco quieren 2 reportes xD

Hola

el criterio más frecuente es determinar si la primera semana del año es aquella que tenga al menos cuatro días del año. En el 2021, la primera semana comienza el día 4/01, siendo los tres primeros de la última del 2020.

Yo considero que este es la mejor opción.

Un saludo
Agustín

1 me gusta

Bueno @Ares17000 de hecho así lo resolvemos los planificadores de producción en un excel sencillo, la formula en excel es (iso.num.sem), así que estarías aplicando lo mismo! :+1:t2:

1 me gusta

Ya muchos respondieron, solamente como una opción extra te comento que tambien puedes utilizar PIVOT con un agrupamiento de SUM.

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.