中的條件我有一個服務使用情況表,其中包含用戶標識附帶的維度表,包括日期,星期幾,一天中的小時等。用戶每次使用該服務時,都會創建一個記錄使用時間的新行。檢查「工作時間」用戶的服務日誌 - 具有條款
我想查找至少在四個工作日內使用該服務的用戶,每天至少在一天中的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))