【发布时间】:2020-07-11 20:45:21
【问题描述】:
此表是一个“心跳”跟踪事件,其中在该流媒体直播时每分钟为每个流媒体生成一行。如果主播直播 60 分钟,则此表将生成 60 行
Create Table minute_streamed
(
time_minute datetime ,
username varchar(50) ,
category varchar(50) ,
concurrent_viewers int
)
Insert into minute_streamed values ('2020-03-18 12:00:00', 'alex','Fornite',125) ;
Insert into minute_streamed values ('2020-03-18 12:01:00', 'alex','Fornite',130) ;
Insert into minute_streamed values ('2020-03-19 15:30:00', 'jamie','Just Chatting',13) ;
Insert into minute_streamed values ('2020-03-19 15:31:00', 'jamie','Food & Drink',15) ;
Insert into minute_streamed values ('2020-03-20 10:30:00', 'rick','Call of Duty: Black Ops',150) ;
Insert into minute_streamed values ('2020-03-20 10:31:00', 'rick','Call of Duty: Modern Warfare',120) ;
Insert into minute_streamed values ('2020-04-21 09:30:00', 'rick','Fornite',120) ;
Insert into minute_streamed values ('2020-04-20 10:31:00', 'rick','Call of Duty: Modern Warfare',120) ;
Insert into minute_streamed values ('2020-04-21 09:30:00', 'rick','Fornite',120) ;
Insert into minute_streamed values ('2020-04-20 10:31:00', 'jamie','Call of Duty: Modern Warfare',120) ;
Insert into minute_streamed values ('2020-04-21 09:30:00', 'jamie','Fornite',120) ;
Insert into minute_streamed values ('2020-04-18 12:00:00', 'alex','Fornite',125) ;
Insert into minute_streamed values ('2020-04-18 12:01:00', 'alex','Fornite',130) ;
Insert into minute_streamed values ('2020-06-18 14:00:00', 'alex','Fornite',120) ;
Alex 在三月份有两个条目。这意味着他直播了 2 分钟。因此,他 3 月的每小时流媒体播放量将是 2/60。
我正在尝试编写一个查询:对于每个日历月,输出从上一个日历月开始流式传输时间增加的主播列表
例如,Alex 有两个 3 月的条目,两个 4 月的条目,一个 6 月的条目。所以他在 3 月直播了 2 分钟(因为他有两个条目),4 月 2 分钟,6 月 1 分钟。我想比较他的最后一个月,也就是六月和上一个日历月。在这种情况下,上一个日历月是 5 月,Alex 没有直播。所以我需要说他在 5 月没有直播,他在 6 月直播。因此,与上一个日历月相比,他增加了流媒体
下面是我的代码,但我想将当前的流媒体播放时间与上一个日历月进行比较。你能帮忙修改我的查询吗?
select
*
from(
select
*
,lag(total_monthly_hours,1) over(partition by username order by year,month) as prev_month
from(
select
username
,year(time_minute) as year
,month(time_minute) as month
,count(*)/60 as total_monthly_hours
from minute_streamed
group by year(time_minute), month(time_minute), username
order by month(time_minute) desc ) as temp ) as temp2
where total_monthly_hours > prev_month
【问题讨论】:
-
小点为什么
concurrent_viewers是一个你只加载整数的列,定义为一个VARCHAR? -
2/60 是什么意思?亚历克斯我没有效仿你的榜样。
-
请忽略 concurrent_viewers @RiggsFolly。对于亚历克斯,他在三月份有两个条目。意思是他直播了 2 分钟。所以他三月份的每小时流将是 2 分钟 / 60 分钟(1 小时)
-
你的主键是什么?
-
不需要主键