SQL Server 2008中时间序列数据的最佳方法

问题描述:

通过SQL Server 2008中的stored procedure,我试图显示过去7天的事务数量,然后将这些数字与一年前的7天时间进行比较。此外,我希望能够在一年前显示月至日与月初至今的月份。或者这个月到上个月。等等基本上,time-series数据。SQL Server 2008中时间序列数据的最佳方法

我已经有了一张包含所有单个交易的表格。我能想到的两个选项是:

  1. 计算每个人每天或每月,并返回结果在运行时设置 。

  2. 计算每个个人日并将结果 放入表中。每天更新。为数周创建另一个表格。 几个月的另一个表。每天添加一条记录或更新现有记录。这肯定会使查询更快,因为 数据已经计算出来。但是,如果我不得不做出更新,前几天(考虑到返回/取消)

注:这是一个内部应用程序,所以不会看到成千上万的请求的一分钟。

什么是返回这种类型的数据的最佳方式?

我想过的另一种选择是通过选项2使用HBase OpenTSDB,但似乎它是相同的过程。

+0

我们在谈论多少数据? – 2012-03-07 19:28:07

+0

桌子总数大约在几百万。每天 - 数千人。 – mikebmassey 2012-03-07 19:53:18

我可能会误解这个问题,或者需要查看您的表格架构(或类似的东西),但我认为这是一个简单的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 

你不得不修改此为您的系统和要求。

设置一个每天(或左右)更新的独立表格是标准的数据仓库策略。如果您不希望“报告”查询锁定您的事务系统,或者您需要特别设计用于支持此类查询的表(用于性能,通常),这会非常有用。但如果

这是一个内部应用程序,所以它不会看到数千个请求 一分钟。

然后听起来像是矫枉过正。

+0

如果你打算在白天进行分组,那么为什么不只是'GROUP BY CONVERT(DATE,TranDate)'? – 2012-03-07 19:48:27

+0

因为我在SQL 2000中编写了这个查询模板:)[完整的表单实际上包含了一周,一小时,一分钟等,使我能够挑选和选择我正在聚合的“时间段”。但是,是的,如果您只处理日历日期,转换为'DATE'数据类型会更简单。] – 2012-03-07 20:11:57

我会与你选择号码2

去你有一个OLTP数据库架构和要运行OLAP查询。

我不认为把它们分开是矫枉过正。