我有一个数据库表,有数十万个论坛帖子,我想知道什么时间段包含最多的帖子.
我可以一次爬行一分钟,保持一系列时间戳,跟踪时间最多的时间,但我觉得有更好的方法来做到这一点.我将在一年的职位上运行这个操作,所以检查一年中的每一分钟似乎都很可怕.
解决方法
在一年中每一分钟填写一张表,您对“分钟”和“表格”有兴趣的时间列:
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秒.所以,不是微不足道的,但偶尔会一次性查询不是很可笑.幸运的是,这是一个数据点,您可以每天计算一次,甚至每月计算一次,如果要频繁显示该值,则可以缓存.