Una aplicación práctica para
nuestra tabla de números y fechas, es el cálculo de las fechas de entrada y
salida de horarios de verano de cada año. Como podemos lograr tal cosa, de una
manera muy simple con nuestra tabla, pero primero, como lo logramos sin usar
nuestra tabla:
SET DATEFIRST 7 DECLARE @fechaAbril DATETIME = '20140401' SELECT --a) ULTIMO DIA DEL MES ANTERIOR DATEADD( M, DATEDIFF( M,'19000101' , @fechaAbril ), '19000101' )-1 , --NUMERO DE DIA DE LA SEMANA DE (a) DATEPART( WEEKDAY,DATEADD( M, DATEDIFF( M,'19000101' , @fechaAbril ), '19000101' )-1 ), --b)DIFERENCIA ENTRE EL PROXIMO DOMINGO SIGUIENTE A LA FECHA (a) 8-DATEPART( WEEKDAY,DATEADD( M, DATEDIFF( M,'19000101' , @fechaAbril ), '19000101' )-1 ), --c) SUMAMOS LA DIFERENCIA (b) A LA FECHA (a) DATEADD( D, 8-DATEPART( WEEKDAY,DATEADD( M, DATEDIFF( M,'19000101' , @fechaAbril ), '19000101' )-1 ), DATEADD( M, DATEDIFF( M,'19000101' , @fechaAbril ), '19000101' )-1 ) AS entradaVerano DECLARE @fechaOctubre DATETIME = '20141001' SELECT --a) PRIMER DIA DEL MES SIGUIENTE DATEADD( M, DATEDIFF( M,'19000101' , @fechaOctubre )+1, '19000101' ) , --NUMERO DE DIA DE LA SEMANA DE (a) DATEPART( WEEKDAY,DATEADD( M, DATEDIFF( M,'19000101' , @fechaOctubre )+1, '19000101' ) ), --b)DIFERENCIA ENTRE EL ANTERIOR DOMINGO A LA FECHA (a) -1*(DATEPART( WEEKDAY,DATEADD( M, DATEDIFF( M,'19000101' , @fechaOctubre )+1, '19000101' ) )-1) , --c) SUMAMOS LA DIFERENCIA (b) A LA FECHA (a) DATEADD( D, -1*(DATEPART( WEEKDAY,DATEADD( M, DATEDIFF( M,'19000101' , @fechaOctubre )+1, '19000101' ) )-1) , DATEADD( M, DATEDIFF( M,'19000101' , @fechaOctubre )+1, '19000101' ) ) As salidaVerano
Y ahora, con nuestra tabla recién creada:
SELECT * FROM tablaNumeros a CROSS APPLY ( SELECT TOP 1 b.fecha FROM tablaNumeros b WHERE a.numeroAnio = b.numeroAnio AND b.numeroMes = 4 AND b.numeroDiaSemana = 7 ORDER BY b.fecha ) AS ax1 CROSS APPLY ( SELECT TOP 1 c.fecha FROM tablaNumeros c WHERE a.numeroAnio = c.numeroAnio AND c.numeroMes = 10 AND c.numeroDiaSemana = 7 ORDER BY c.fecha DESC ) AS ax2
Y de esta manera es como podemos obtener el resultado que esperamos, espero que les sirva.
SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE
0 comentarios:
Publicar un comentario