Buongiorno,
ho una tabella (My_Shifts) di questo tipo:
ShiftNum / ShiftWeekday / ShiftStartHH/ ShiftDuration / ShiftDescr /ShiftActive/ ShiftEndNextDay
1 1 7 480 Turno 1 True False 1 2 7 480 Turno 1 True False 1 3 7 480 Turno 1 True False 1 4 7 480 Turno 1 True False 1 5 7 480 Turno 1 True False 1 6 7 480 Turno 1 True False 1 7 7 480 Turno 3 True False 2 1 15 480 Turno 2 True False 2 2 15 480 Turno 2 True False 2 3 15 480 Turno 2 True False 2 4 15 480 Turno 2 True False 2 5 15 480 Turno 2 True False 2 6 15 480 Turno 2 True False 2 7 15 480 Turno 3 False False 3 1 23 480 Turno 3 False True 3 2 23 480 Turno 3 False True 3 3 23 480 Turno 3 False True 3 4 23 480 Turno 3 False True 3 5 23 480 Turno 3 False True 3 6 23 480 Turno 3 False True 3 7 23 480 Turno 3 False True
Sostanzialmente mostra i turni attivi nella giornata (flag Attivo) con ora inizio e durata per ogni giorno della settimana. Qui ad esempio lavorano tutti i giorni su due turni dalle 7-15 e 15-23
L'operatore inserir� a terminale una dataora inizio e dataora fine e devo estrarre il totale dei minuti disponibili.
Esempio:
dal 20/02/2017 07:00 al 21/02/2017 07:00 = 960 minuti disponibili
Avete qualche idea?
Io mi sono fatto una tabella mycalendar con tutti i gg dell'anno e poi ho fatto questa query:
SELECT (CASE WHEN DATEPART(dw, '27/02/2017') <> 7 THEN SUM(ShiftDurationMinutes) - DATEDIFF(minute, '20/02/2017 00:00:00', '20/02/2017 7:00:00') - - DATEDIFF(minute, '28/02/2017 00:00:00', '27/02/2017 7:00:00')
ELSE SUM(ShiftDurationMinutes) - DATEDIFF(minute, '20/02/2017 00:00:00', '20/02/2017 7:00:00') - 60 END) AS ShiftDurationTot
FROM (SELECT CONVERT(char(10), A.LocalTimeCol, 103) AS Day, dbo.My_Shifts.ShiftDurationMinutes
FROM dbo.My_Calendar AS A INNER JOIN
dbo.My_Shifts ON DATEPART(dw, A.LocalTimeCol) = dbo.My_Shifts.ShiftWeekday
WHERE (A.LocalTimeCol >= '20/02/2017 00:00:00') AND (A.LocalTimeCol <= '27/02/2017 00:00:00') AND (dbo.My_Shifts.ShiftActive = 1)
GROUP BY CONVERT(char(10), A.LocalTimeCol, 103), dbo.My_Shifts.ShiftNum, dbo.My_Shifts.ShiftDurationMinutes) AS B
Ma ha qualche buco.... in pi� forse si fa senza fare una ulteriore tabella.
Grazie per ogni eventuale aiuto e consiglio!