Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Calcular semana del año fiscal

Estas en el tema de Calcular semana del año fiscal en el foro de Bases de Datos General en Foros del Web. Buenos días a todos. Estoy intentando hacer una consulta que me devuelva el número de semana de una fecha en concreto. El problema que tengo, ...
  #1 (permalink)  
Antiguo 30/10/2009, 04:15
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Calcular semana del año fiscal

Buenos días a todos.

Estoy intentando hacer una consulta que me devuelva el número de semana de una fecha en concreto.

El problema que tengo, es que no estoy trabajando con semanas naturales, sino con semanas fiscales. De modo que ninguna función del estilo WEEK(fecha) me sirve.

En mi caso, el año fiscal en la empresa, comienza el 1 de Octubre.

De modo que según el calendario de este año sería:

01/10/2009 -->1 (en este caso la semana tiene menos de 7 dias, pues empieza en jueves dia 1)
...
04/10/2009 -->1
05/10/2009 -->2
...
11/10/2009 -->2
12/10/2009 -->3
...
18/10/2009 -->3
19/10/2009 -->4
...
25/10/2009 -->4
26/10/2009 -->5
...
01/11/2009 -->5
02/11/2009 -->6
...
08/11/2009 -->6

He estado probando sumando días/meses a la fecha WEEK(fecha + X) hasta conseguir que concordara con un año natural para entonces sí poder utilizar la función que me devuelve la semana, pero no concuerda exactamente la fecha y me devuelve los datos con cierto desfase.

Existe algún método para poder conseguirlo?

Muchas gracias.
  #2 (permalink)  
Antiguo 30/10/2009, 05:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Calcular semana del año fiscal

Crea una tabla con las semanas fiscales:
tabla semanasfiscales
fechacomienzo, fechafin, nºsemana
2009/10/01, 2009/10/04, 1
2009/10/05, 2009/10/11, 2
...
Luego te bastará hacer un inner join del tipo
SELECT tt.fecha, sf.nºsemana FROM tutabla tt INNER JOIN semanasfiscales sf ON (fecha BETWEEN fechacomienzo AND fechafin)
Esta es la idea. No lo he probado
  #3 (permalink)  
Antiguo 30/10/2009, 05:15
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Calcular semana del año fiscal

Hombre...
Gracias por la sugerencia, pero se trata de obtenerla lo más automáticamente posible a partir de los datos que ya estén en las tablas. Además es una base de datos third party en la cual no puedo escribir, simplemente leer datos.

Gracias.
  #4 (permalink)  
Antiguo 30/10/2009, 05:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Calcular semana del año fiscal

Algunas funciones de este tipo tienen diferencias según el DBMS.
En el caso de MySQL, por ejemplo, es WEEKOFYEAR(date), que devuelve qué semana del año es en una numeración del 1 al 53.
También se peude usar WEEK(fecha, dia), donde dia es un valor del 0 al 7 que indica qué modo analizará el inicio del año.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/10/2009, 05:46
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Calcular semana del año fiscal

Ok, entiendo, en mi caso se trata de Oracle, y lo obtengo tal que:

TO_CHAR(R.PRODUCTIONDAY, 'IW') AS WEEK

por si hay alguien que se le pueda ocurrir algo también he probado sumando y restando días para tratar de hacerlo concordar con un año natural, pero al llegar a un año bisiesto rompe toda regla que se pudiera aplicar...

TO_CHAR(R.PRODUCTIONDAY + 1 + 13 * 7, 'IW') AS WEEK

En el fondo, parece más un problema de algoritmia que de bases de datos.
  #6 (permalink)  
Antiguo 02/11/2009, 18:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Calcular semana del año fiscal

Joseibarz,
se me ocurre un truco: restas la fecha de la que quieres saber a qué semana fiscal pertenece al primer día fiscal y luego le sumas 4 días antes (recuerda que era jueves, y se trata de llegar hasta el lunes de esa semana), todo eso lo divides por siete y sacas el número de la semana fiscal
Código sql:
Ver original
  1. SELECT CEIL((DATEDIFF('2009-10-18','2009-10-01')+4)/7) numsemanafiscal

Código sql:
Ver original
  1. SELECT IF('2009-10-18' BETWEEN '2009-10-01' AND '2010-09-30', CEIL((DATEDIFF('2009-10-18','2009-10-01')+4)/7), 'no es semana fiscal')

aquí te he puesto un control para evitar que te dé datos de fechas anteriores y posteriores. También
puedes aplicarlo a las fechas de la tabla, como en este ejemplo.
Código sql:
Ver original
  1. SELECT campofecha, IF(campofecha BETWEEN '2009-10-01' AND '2010-09-30', CEIL((DATEDIFF(campofecha,'2009-10-01')+4)/7), 'no es semana fiscal') numsemanafiscal FROM tutabla

Esto es MySQL. Tendrás que adaptarlo, pero esa es la idea. Incluso podrías programar para que según sea el dia de la semana que pongas como origen, te reste el número adecuado para llegar al lunes de esa semana, pero esto es sólo para que te hagas una idea.

Última edición por jurena; 03/11/2009 a las 01:01
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 10:06.