SQL Server 2008中时间序列数据的最佳方法
通过SQL Server 2008
中的stored procedure
,我试图显示过去7天的事务数量,然后将这些数字与一年前的7天时间进行比较。此外,我希望能够在一年前显示月至日与月初至今的月份。或者这个月到上个月。等等基本上,time-series
数据。SQL Server 2008中时间序列数据的最佳方法
我已经有了一张包含所有单个交易的表格。我能想到的两个选项是:
计算每个人每天或每月,并返回结果在运行时设置 。
计算每个个人日并将结果 放入表中。每天更新。为数周创建另一个表格。 几个月的另一个表。每天添加一条记录或更新现有记录。这肯定会使查询更快,因为 数据已经计算出来。但是,如果我不得不做出更新,前几天(考虑到返回/取消)
注:这是一个内部应用程序,所以不会看到成千上万的请求的一分钟。
什么是返回这种类型的数据的最佳方式?
我想过的另一种选择是通过选项2使用HBase OpenTSDB
,但似乎它是相同的过程。
我可能会误解这个问题,或者需要查看您的表格架构(或类似的东西),但我认为这是一个简单的SELECT COUNT(*)...WHERE DATE BETWEEN [2Dates]
。如果你需要做的就是计算交易。
我一般都认同@Justin。加快它的一种方法是基于这样的想法的查询:
SELECT
datepart(yy, TranDate) Year
,datepart(mm, TranDate) Month
,datepart(dd, TranDate) Day
,count(*)
from TranTable
where TranDate between @Start and @Stop
group by
datepart(yy, TranDate) -- Year
,datepart(mm, TranDate) -- Month
,datepart(dd, TranDate) -- Day
order by
datepart(yy, TranDate) -- Year
,datepart(mm, TranDate) -- Month
,datepart(dd, TranDate) -- Day
你不得不修改此为您的系统和要求。
设置一个每天(或左右)更新的独立表格是标准的数据仓库策略。如果您不希望“报告”查询锁定您的事务系统,或者您需要特别设计用于支持此类查询的表(用于性能,通常),这会非常有用。但如果
这是一个内部应用程序,所以它不会看到数千个请求 一分钟。
然后听起来像是矫枉过正。
如果你打算在白天进行分组,那么为什么不只是'GROUP BY CONVERT(DATE,TranDate)'? – 2012-03-07 19:48:27
因为我在SQL 2000中编写了这个查询模板:)[完整的表单实际上包含了一周,一小时,一分钟等,使我能够挑选和选择我正在聚合的“时间段”。但是,是的,如果您只处理日历日期,转换为'DATE'数据类型会更简单。] – 2012-03-07 20:11:57
我们在谈论多少数据? – 2012-03-07 19:28:07
桌子总数大约在几百万。每天 - 数千人。 – mikebmassey 2012-03-07 19:53:18