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

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

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

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

解决方法

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...