我有一张表格,其中包含过去24小时内的所有观看次数。我想拉一个等级排序的所有页面。排名应该计算如下:
rank = (0.3 * viewsInCurrentHour) * (0.7 * viewsInPreviousHour)
我想在一个单一的查询中得到最好的结果。这是可能的,还是我需要进行2次查询(一个用于当前小时,一个用于最后一小时,然后只是聚合它们)?
以下是表格DESCRIBE
的{{1}}:
accesslog
答案 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 trye
中1
而false
是0
,所以总结一个条件与一些noobs写的相同sum(case when condition then 1 else 0 end)
请注意添加where timestamp > subdate(now(), interval 2 hour)
以提高效果,因为只有这些记录才会对结果产生影响。