У меня есть таблица использования сервиса по идентификатору пользователя, которая сопровождается таблицей измерений, включая дату, день недели, час дня и т. Д. Каждый раз, когда пользователь использует эту услугу, создается новая строка, которая регистрирует время использования.Проверка журналов служб для пользователей «рабочего времени» - условия в наличии предложения
Я хочу найти пользователей, которые используют услугу, по крайней мере, четыре из пяти будних дней, каждый день регистрируя использование, по крайней мере, в 8 отдельных часов дня. Это пользователи рабочего времени. Как я могу это достичь?
В настоящее время я вступаю в компромисс с приведенным ниже пунктом having
, который полностью не фиксирует указанные выше условия. Скорее, он получает пользователей, которые используют эту услугу, по крайней мере, в течение 16 рабочих дней в месяц с использованием в среднем не менее 8 часов в день.
select
a.userId
from SERVICE_LOGS_MTHLY a
inner join DIM_TIME_OF_DAY b
on a.TOD_ID = b.TOD_ID
having
count(distinct (case when b.day_of_week in ('MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY') then a.day end)) >= 16
AND
count(distinct (case when b.day_of_week in ('MONDAY') then a.day||b.hour24 end)) >= 8*count(distinct (case when b.day_of_week in ('MONDAY') then a.day end))
AND
count(distinct (case when b.day_of_week in ('TUESDAY') then a.day||b.hour24 end)) >= 8*count(distinct (case when b.day_of_week in ('TUESDAY') then a.day end))
AND
count(distinct (case when b.day_of_week in ('WEDNESDAY') then a.day||b.hour24 end)) >= 8*count(distinct (case when b.day_of_week in ('WEDNESDAY') then a.day end))
AND
count(distinct (case when b.day_of_week in ('THURSDAY') then a.day||b.hour24 end)) >= 8*count(distinct (case when b.day_of_week in ('THURSDAY') then a.day end))
AND
count(distinct (case when b.day_of_week in ('FRIDAY') then a.day||b.hour24 end)) >= 8*count(distinct (case when b.day_of_week in ('FRIDAY') then a.day end))