0

我有一张桌子可以节省客户观看视频的时间。我想找出观看视频最多的高峰时段以及高峰时段是多少。我需要这些数据在数据库中的所有日子。我怎样才能做到这一点?

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

4

2 回答 2

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 并选择一行来选择最大值。

于 2012-08-31T22:33:54.153 回答
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:您的实现可能因细节而异。与日期/时间相关的内容在不同的实现中差异很大。

于 2012-08-31T23:58:06.543 回答