按最后一小时的观看次数排序[MySQL]

时间:2012-03-12 09:18:11

标签: mysql sql-order-by

我有一张表格,其中包含过去24小时内的所有观看次数。我想拉一个等级排序的所有页面。排名应该计算如下:

rank = (0.3 * viewsInCurrentHour) * (0.7 * viewsInPreviousHour)

我想在一个单一的查询中得到最好的结果。这是可能的,还是我需要进行2次查询(一个用于当前小时,一个用于最后一小时,然后只是聚合它们)?

以下是表格DESCRIBE的{​​{1}}:

accesslog

1 个答案:

答案 0 :(得分:2)

select
    url,
    sum(timestamp between subdate(now(), interval 2 hour) and subdate(now(), interval 1 hour)) * .3 +
    sum(timestamp between subdate(now(), interval 1 hour) and now()) * .7 as rank
from whatever_your_table_name_is_which_you_have_kept_secret
where timestamp > subdate(now(), interval 2 hour)
group by url
order by rank desc;

sum(condition)有效,因为在mysql trye1false0,所以总结一个条件与一些noobs写的相同sum(case when condition then 1 else 0 end)

编辑:

请注意添加where timestamp > subdate(now(), interval 2 hour)以提高效果,因为只有这些记录才会对结果产生影响。