Рассчитать разницу между 2 датами - PullRequest
0 голосов
/ 04 февраля 2020

Меня попросили составить отчет Power BI, в котором будут показаны некоторые детали службы поддержки организации. Я сделал это легко, но есть одна вещь, которую я не мог понять: они попросили меня показать среднее время, затрачиваемое каждым аналитиком службы поддержки на обработку заявок. Проблема в том, что я должен рассчитывать среднее время только между 8:00 и 18:00 в каждый день. это означает, что в день есть только 10 часов. Я пытался сделать это в SQL (MySQL), но ничего не вышло.

Извините, если это глупый вопрос, я все еще изучаю SQL и Power BI.

Я пытался:

CASE WHEN EXTRACT(HOUR FROM tick.CREATED) >= 8 AND
EXTRACT(HOUR FROM tick.TIME_CLOSED) <= 18 AND
weekday(tick.CREATED) not in (6,7) THEN
TIMESTAMPDIFF(HOUR,tick.CREATED,tick.TIME_CLOSED) END

Но я не знаю, как пропустить часы из этого диапазона и продолжить считать часы на следующий день.

1 Ответ

0 голосов
/ 04 февраля 2020

Попробуйте, пожалуйста, измените имена столбцов и, возможно, добавьте группу, если вам нужно каждый день

SELECT AVG(TIMESTAMPDIFF(SECOND,`from`,`to`))
FROM (
    SELECT `to`  
        ,CASE 
            -- if saturday then start date will be next monday first hour
            WHEN weekday(`from`) = 6 then CONCAT(DATE(DATE_ADD(`from`, INTERVAL 2 DAY)),' 08:00:00') 
            -- if sunday then start date will be next monday first hour
            WHEN weekday(`from`) = 7 then CONCAT(DATE(DATE_ADD(`from`, INTERVAL 1 DAY)),' 08:00:00') 
            -- if created outside business time then next day first hour
            WHEN `from` between CONCAT(DATE(`from`),' 18:00:00') and CONCAT(DATE(DATE_ADD(`from`, INTERVAL 1 DAY)),' 08:00:00') then CONCAT(DATE(DATE_ADD(`from`, INTERVAL 1 DAY)),' 08:00:00')
            ELSE `from`
        END `from`
    FROM ticket
    WHERE `from` is not null
        AND `to` is not null
) t
WHERE DATE(`from`) = DATE (`to`); -- if you want only ticket closed same day, its optional
...