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

前端之家收集整理的这篇文章主要介绍了数据库 – 如何找到最多数据点的一小时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数据库表,有数十万个论坛帖子,我想知道什么时间段包含最多的帖子.

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

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

解决方法

在一年中每一分钟填写一张表,您对“分钟”和“表格”有兴趣的时间列:
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.

猜你在找的MsSQL相关文章