Получите количество часов между датами, исключая выходные - PullRequest
0 голосов
/ 05 августа 2020

Мне нужно рассчитать количество часов между двумя датами, одна из которых - СЕЙЧАС (), исключая выходные. Я нашел несколько решений, в которых используются хранимые процедуры или mysql функции, но я хочу сделать это в рамках одного запроса.

Я могу получить общую разницу в часах, используя это:

SELECT HOUR(TIMEDIFF(NOW(), created_at))

Но мне это нужно, чтобы возвращать только часы будних дней, а не выходные. Таким образом, с 23:00 пятницы до 1:00 понедельника разница должна составлять всего 2 часа.

Любая помощь приветствуется.

Спасибо!

Mysql 8

1 Ответ

2 голосов
/ 05 августа 2020

На языке программирования вы должны написать al oop и суммировать часы, перебирая дни. В SQL вы можете сделать то же самое с рекурсивным запросом:

with recursive cte (id, dt, minutes) as
(
  select
    id,
    date(created_at),
    case
      when dayofweek(created_at) in (1, 7) then 0
      else timestampdiff(minute, created_at, least(now(), date(created_at) + interval 1 day))
    end
  from mytable
  union all
  select
    id,
    dt + interval 1 day,
    case
      when dayofweek(dt + interval 1 day) in (1, 7) then 0
      else timestampdiff(minute, dt + interval 1 day, least(now(), dt + interval 2 day))
    end
  from cte
  where dt + interval 1 day <= curdate()
)
select id, round(sum(minutes) / 60, 1) as hours
from cte
group by id
order by id;

Demo: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a08f96bc29fb8a51302da10679496e22

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...