微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库 – 如何找到最多数据点的一小时?

我有一个数据库表,有数十万个论坛帖子,我想知道什么时间段包含最多的帖子.

我可以一次爬行一分钟,保持一系列时间戳,跟踪时间最多的时间,但我觉得有更好的方法来做到这一点.我将在一年的职位上运行这个操作,所以检查一年中的每一分钟似乎都很可怕.

理想情况下,将有一种方法可以在单个数据库查询中执行此操作.

解决方法

在一年中每一分钟填写一张表,您对“分钟”和“表格”有兴趣的时间列:
select top 1 minutes.time,count (posts.time)
from Minutes
   left join posts on posts.time >= minutes.time AND posts.time < dateadd(hour,1,Minutes.Time)
group by minutes.time
order by count (posts.time) desc

解决生成分表,可以使用像ufn_GenerateIntegers.这样的功能
然后功能变成了

select top 5 minutes.time,count (posts.time)
from (select dateadd(minute,IntValue,'2008-01-01') as Time from ufn_GenerateIntegers(525600)) Minutes
   left join posts on posts.time >= minutes.time AND posts.time < dateadd(hour,Minutes.Time)
group by minutes.time
order by count(posts.time) desc

我刚刚做了大约5000个随机帖子的测试,在我的机器上花费了16秒.所以,不是微不足道的,但偶尔会一次性查询不是很可笑.幸运的是,这是一个数据点,您可以每天计算一次,甚至每月计算一次,如果要频繁显示该值,则可以缓存.

看看lassevk’s improvement.

原文地址:https://www.jb51.cc/mssql/75655.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐