Сумма часа на сервере sql - PullRequest
       0

Сумма часа на сервере sql

0 голосов
/ 23 сентября 2019

Приведенный ниже код выполняет выбор для отображения часов хронометриста при определенных условиях.

Пример вывода: Дата Часы

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...