날짜, 요일, 시간 등을 포함하는 차원 테이블과 함께 제공되는 사용자 ID 별 서비스 테이블 사용이 있습니다. 사용자가 서비스를 사용할 때마다 사용 시간을 기록하는 새로운 행이 만들어집니다."작업 시간"사용자에 대한 서비스 로그 검사 - 조항이있는 조건
서비스를 사용하는 사용자가 주중 5 명 중 4 명 이상, 매일 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))