SQL Server - Rango de fechas con intervalo en minutos

 
Vista:
Imágen de perfil de andres
Val: 9
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Rango de fechas con intervalo en minutos

Publicado por andres (5 intervenciones) el 26/04/2019 05:38:02
Hola estimados miembros de la web del programador, es la primera vez que solicito ayuda por este medio. Espero no equivocarme de foro o algo por el estilo...sepan disculpar

El problema que planteo es el siguiente:
Estoy trabajando en un proyecto de turnos médicos y tengo problemas en el siguiente script de SqlServer 2014 con estos 4 intervalos en minutos (25, 35, 50 y 55 en el DATEADD) ya que necesito que comience a las 08:00 cada vez que cambie la Fecha de atención y eso no sucede.

Este script o Cte toma un intervalo entre 2 fechas y una hora de inicio y hora fin + el dia de la semana elegido.

Osea necesitaría por favor que estos 4 intervalos independientemente de que día de atención este seleccionado empiece con la hora almacenada en @fec_inicio cada vez que cambie la fecha.


script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
declare
@fec_inicio DateTime,
@fec_fin DateTime
 
SELECT @fec_inicio = '2019-04-25 08:00', @fec_fin = '2019-05-15 10:00'
 
;WITH FECHAS(fecha) AS (
SELECT @fec_inicio as fecha
UNION all
SELECT DATEADD(MINUTE,35, fecha) -- INTERVALO ENTRE CADA CONSULTA MEDICA
FROM FECHAS
WHERE fecha < @fec_fin
)
SELECT fecha from FECHAS
WHERE  CONVERT(VARCHAR,fecha,108) between
CONVERT(VARCHAR,@fec_inicio,108) and
CONVERT(VARCHAR,@fec_fin,108)
and DATEPART(DW, fecha) = 3    --DIAS DE ATENCION:  Lun:2, Mar:3, Mier:4, jue:5; vier:6, sab:7, dom:1
 
ORDER BY fecha
OPTION (Maxrecursion 0)

resultado con error:

script_error

resultado deseado:

resultado_deseado


Espero puedan ayudarme.. muchísimas gracias
andres
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vega
Val: 102
Ha aumentado su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Rango de fechas con intervalo en minutos

Publicado por Vega (43 intervenciones) el 26/04/2019 09:27:55
Hola Andres:

Yo applicaria un cross join a la tabla de fechas para controla los horarios de consulta de forma separada. Así controlarías mejor el conjunto de horarios sin afectar el resto de la consulta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
declare
@fec_inicio DateTime,
@fec_fin DateTime
 
SELECT @fec_inicio = '2019-04-25 08:00', @fec_fin = '2019-05-15 10:00'
 
;WITH FECHAS(fecha, DiaDeAtención) AS (
SELECT @fec_inicio as fecha, DiaDeAtención = datepart(weekday,@fec_inicio)
UNION all
SELECT DATEADD(DAY,1, fecha),  datepart(weekday,fecha) -- INTERVALO ENTRE CADA CONSULTA MEDICA
FROM FECHAS
WHERE fecha < @fec_fin
)
,consultas as (
select Minuto = 0	UNION ALL
select Minuto = 35	UNION ALL
select Minuto = 70	UNION ALL
select Minuto = 105
)
SELECT fecha, DATEADD(minute, c.Minuto, f.fecha) from FECHAS F
CROSS JOIN CONSULTAS C
where DiaDeAtención = 3
 
ORDER BY fecha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de andres
Val: 9
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Rango de fechas con intervalo en minutos

Publicado por andres (5 intervenciones) el 26/04/2019 21:14:34
Gracias vega, esta noche vuelvo del trabajo y lo pruebo a ver si podemos sacarlo adelante.. muy agradecido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de andres
Val: 9
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Rango de fechas con intervalo en minutos

Publicado por andres (5 intervenciones) el 29/04/2019 16:30:08
Hola, Buen día, el código funciona muy bien y es lo que esperaba, pero habrá alguna posibilidad de crear alguna función para que al ir cambiando la hora en: @fec_inicio = '2019-04-25 08:00' o @fec_fin = '2019-05-15 10:00' me calcule solo las diferencias en minutos?? porque por lo que veo el código esta Harcodeado para que funcione con un rango de 35 minutos y solo con la hora de 08:00 a 10:00 !!

Bueno de todas maneras muy agradecido por su ayuda
andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 102
Ha aumentado su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Rango de fechas con intervalo en minutos

Publicado por Vega (43 intervenciones) el 26/04/2019 18:26:21
Faltaría más!

Buen enlace, el mismo problema sin duda.
El uso de Cross apply vale también. Y suele ir más rápido también.

Creo que lo más importante es cambiar las variables a fecha e ir sumando minutos a partir de la media noche de cada día.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de andres
Val: 9
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Rango de fechas con intervalo en minutos

Publicado por andres (5 intervenciones) el 26/04/2019 21:18:40
Gracias isaias, esta noche vuelvo del trabajo y miro el enlace que me facilito usted. Es un gusto para mi que usted me responda, al igual que vega.
Si tengo algún problema volveré a escribirles si no es molestia...
Saludos
Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar