我在 BigQuery 中有以下表格。
foo.处置
foo.poc
以下查询返回拨打电话号码的总次数:
SELECT
ANI_DIALNUM, COUNT(*) as Dialed_Frequency
FROM
(
select ANI_DIALNUM FROM `foo.disposition`
WHERE
Skill_name like 'Support%IB%'
AND parse_date('%m/%d/%Y', Start_Date) > '2024-01-01'
union all
select Contact_Name FROM `foo.disposition`
WHERE
Skill_name like 'Support%IB%'
AND parse_date('%m/%d/%Y', Start_Date) > '2024-01-01'
) t
WHERE
ANI_DIALNUM NOT IN (select `Point of Contact` from `foo.poc`)
AND NOT ANI_DIALNUM = '8.884157149E9'
GROUP BY ANI_DIALNUM
ORDER BY Dialed_Frequency desc
我有一个查询返回两列中匹配项出现的总次数。它似乎工作正常。我现在只想计算 24 小时内发生的情况。换句话说,如果每 24 小时内同一电话号码拨打的电话次数超过 3 次。找到匹配项后,24 小时期限将重置。呼。
您将需要使用 cte 而不是子选择,以使其更易于阅读,这里有一些未经测试的代码,可以让您接近:
with _raw ( --deal with sub-select first
select ANI_DIALNUM,
datetime_trunc(parse_datetime('%m/%d/%Y %H:%M:%S', Start_Date || ' ' || Start_Time), HOUR) AS callHour
FROM `foo.disposition`
WHERE Skill_name like 'Support%IB%'
AND parse_date('%m/%d/%Y', Start_Date) > '2024-01-01'
union all
select Contact_Name,
datetime_trunc(parse_datetime('%m/%d/%Y %H:%M:%S', Start_Date || ' ' || Start_Time), HOUR) AS callHour
FROM `foo.disposition`
WHERE Skill_name like 'Support%IB%'
AND parse_date('%m/%d/%Y', Start_Date) > '2024-01-01'
), _cull as (
select *
from _raw
where ANI_DIALNUM NOT IN (select `Point of Contact` from `foo.poc`)
AND NOT ANI_DIALNUM = '8.884157149E9'
), _window as (
select *,
count(*) over (partition by ANI_DIALNUM
order by callHour
range between interval 24 hour preceding and current row
) as hour24count
from _cull
)
select ANI_DIALNUM, count(*) as cnt
from _window
where hour24count >=3
group by 1
order by 2 desc