用于确定所有日期的峰值音量和小时的SQL

时间:2012-08-31 22:15:22

标签: sql

我有一张表可以节省客户观看视频的时间。我想找出观看大部分视频时的高峰时段以及峰值数。我在数据库中的所有日子都需要这些数据。我怎么能做到这一点?

我只能通过使用max和count函数以及内部联接来获得一条记录,但我想要每天的峰值音量和小时数。

2 个答案:

答案 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:您的实现可能会有所不同。日期/时间相关的东西在不同的实现中差异很大。