在无线电广播中,有一个称为“平均四分之一小时人员”(AQH)的术语,可以定义为...在一个广播中至少收听五分钟的平均人数。 15分钟。
我不确定如何在SQL中启动此操作,因为侦听会话跨越了15分钟的不同时段。
15分钟的时段是0-15、15-30、30-45和45-60。
以下是度量标准创建者的示例:“ 例如,1:00-1:05、1:00-1:10或1:00-1:15各自等于四分之一小时听,但是1:11-1:19是 不是四分之一小时的收听时间(时钟四分之一小时的1:00-1:15或1:15-1:30都没有五分钟)。“
让我们假设有一张下表,其中每一行都包含广播电台,用户开始收听的时间和用户停止收听的时间。为了简单起见,我不包含任何类型的用户ID等。
radio_station varchar
session_start time
session_stop time
我该如何编写SQL来计算每小时的度量标准?
答案 0 :(得分:0)
此查询在sql server中有效。唯一的问题是如何处理那些在午夜或下午结束的会话,它们的表示方式。
设置示例数据:
declare @t table(session_start time, session_stop time)
insert @t values ('1:00','1:05'),('1:00','1:10'),('1:00','1:15'),('1:11','1:19')
基于CTE的查询。创建时间段。如果CTE不可用,请创建一个包含这些条目的表。其余查询保持不变。
;with valid_times as (
select convert(time,'00:00') as valid_start, convert(time,'00:15') as valid_end
union all
select dateadd(minute,15,valid_start), dateadd(minute,15,valid_end)
from valid_times
where valid_start<='23:30'
)
select valid_start, valid_end,
sum(case when datediff(minute,
case when session_start<valid_start then valid_start else session_start end,
case when session_stop>valid_end then valid_end else session_stop end
)>=5 then 1 else 0 end) as AQH
from valid_times
left join @t t on valid_end>=session_start and valid_start<=session_stop
group by valid_start, valid_end