Я пытаюсь найти разницу во времени в минутах между двумя датами, но я хочу, чтобы разница учитывала время, когда магазин был открыт. Магазин открыт только 9 часов в день и только в будние дни (выходные тоже закрыты), поэтому разница во времени должна учитывать время согласно часам работы.
Пример: 18.07.2019 9:50 - 22.07.2019 10:02
SELECT date_diff('minute', date_parse('7/18/2019 9:50:00 AM','%m/%d/%Y %h:%i:%s %p'), date_parse('7/22/2019 10:02:00 AM','%m/%d/%Y %h:%i:%s %p'))
Это дает ответ как 5772. Но я хочу, чтобы ответ был 1092.
Эксель формула такая
A1 = 7/18/2019 9:50 AM
B1 = 7/22/2019 10:02 AM
if(OR(A1="",A1="NULL",B1="",B1="NULL"),"",(A1-B1)*24*60 - (days(A1,B1)+1-NETWORKDAYS(A1,B1))*24*60 - (NETWORKDAYS(A1,B1)-1)*15*60)
Эта версия у меня работает, но есть ли способ лучше? Кроме того, если бы мы могли написать функцию в presto, я не знаю, как написать вызываемую функцию в presto.
with working_days AS
(
select count(*) as wd from unnest(sequence (cast('2017-06-07' as date), cast('2017-06-13' as date))) t(x)
WHERE extract (day_of_week from x) < 6
)
select date_diff('minute', cast('2017-06-07 11:19:11.287' as timestamp), cast('2017-06-13 09:53:14.750' as timestamp)) -
((date_diff('day', cast('2017-06-07' as date), cast('2017-06-13' as date))+1 - wd)*24*60 + (wd - 1)*16*60)
FROM working_days