我有一张表可以节省客户观看视频的时间。我想找出观看大部分视频时的高峰时段以及峰值数。我在数据库中的所有日子都需要这些数据。我怎么能做到这一点?
我只能通过使用max和count函数以及内部联接来获得一条记录,但我想要每天的峰值音量和小时数。
答案 0 :(得分:2)
语法取决于数据库。另外,你的问题很模糊。我将其解释为“高峰时段的总和”,而不是“某一天的高峰时段”。
以下几乎是ANSI语法:
select *
from (select extract(hour from ViewTime) as hr, count(*) as cnt
from VideoViews
group by extract(hour from ViewTime)
) t
order by cnt desc
limit 1
在某些数据库中,您可能正在使用“datepart()”或“to_char()”来获取日期的小时。在某些数据库中,您可以使用“top(1)”或“rownum = 1”而不是“limit 1”。但是,总体思路是相同的:聚合以获得您想要的结果,然后通过使用order by并选择一行来选择最大值。
答案 1 :(得分:0)
给定一个表格模式:
create table customer_view_log
(
customer_id int not null ,
dt_viewed datetime not null ,
video_id int not null ,
constraint customer_view_log_PK primary key nonclustered ( customer_id , dt_viewed ) ,
constraint customer_view_log_AK01 unique nonclustered ( dt_viewed , customer_id ) ,
constraint customer_view_log_FK01 foreign key ( customer_id ) references customer ( id ) ,
constraint customer_view_log_FK01 foreign key ( video_id ) references video ( id ) ,
)
像这样的查询
select top 1
Hour = datepart(hour,dt_viewed) ,
Viewings = count(*)
from customer_view_log
group by datepart(hour,dt_viewed)
order by 2 desc
应该做的伎俩。以上是SQL Server:您的实现可能会有所不同。日期/时间相关的东西在不同的实现中差异很大。