Приведенный ниже код выполняет выбор для отображения часов хронометриста при определенных условиях.
Пример вывода: Дата Часы
Data Totale
09/23/2019 7:30 12:00 14:00 17:00
24/09/2019 8:02 13:04
Для выполнения кода требуется выполнить различие междуиз каждого дня и выполнить сумму, т.е.:
12:00 - 7:30 = 04:30
17:00 - 14:00 = 03:00
И выполнить сумму 03:00 + 04:30 = 07:30
То, что я хочу получить, это
Data Totale
24/09/2019 07:30
Sql код:
SELECT data,
String_agg(ore, ' ') AS Ore
FROM (SELECT Format(Dateadd(minute, Datediff(minute, 0, datacreazione) / 15 * 15, 0),
'dd/MM/yyyy', 'it-IT') AS Data,
Concat(( CASE
WHEN Datepart(minute, datacreazione) > 45
THEN Datepart(hour, datacreazione) + 1
ELSE Datepart(hour, datacreazione)
END ), ':', ( CASE
WHEN Datepart(minute, datacreazione)
BETWEEN 0 AND 15
AND stato = 'Ingresso'
THEN '15'
WHEN Datepart(minute, datacreazione)
BETWEEN 16 AND 30
AND stato = 'Ingresso'
THEN '30'
WHEN Datepart(minute, datacreazione)
BETWEEN 31 AND 45
AND stato = 'Ingresso'
THEN '45'
ELSE '00'
END )) AS Ore
FROM marcatura
WHERE idutente = @IdUtente
AND ( stato = 'Ingresso' OR stato = 'Uscita' )
AND Cast(datacreazione AS DATETIME)
BETWEEN Cast(CONVERT(VARCHAR(10), CONVERT(DATE, @Start, 5), 23) AS DATETIME)
AND Cast(CONVERT(VARCHAR(10), CONVERT(DATE, @End, 5), 23) AS DATETIME)
) t
GROUP BY data
ORDER BY CONVERT(DATETIME, data, 105) DESC