[英]Rounding up of data in SQL Server 2014
我已经使用SQL Server 2014作为数据库在C#(ASP.NET 4.0)中开发了一个应用程序。
我对汇总和汇总数据有疑问。 我有通过FTP通过CSV传入的数据,并将原始数据导入到表中。 客户每分钟记录一次数据。 数据由客户ID标识。
现在,我被要求获取该数据并将时间序列数据汇总为每小时的15分钟。
然后,他们希望将数据四舍五入为几天(午夜至午夜),然后将数据四舍五入为几周(周一至周日)。 他们还希望将日数据四舍五入为从午夜到午夜的日历月,并将月数据四舍五入为一年。
想法是将原始时间序列数据分组为组成部分的时间段,例如日,周,月,以便他们可以看到该时间段的总计。
我查看了SQL中的游标和循环,并被告知开销将非常大,因为我已经有3亿行记录并在处理。
我不应该使用C#开发服务来在服务器上完成所有工作,还是使用数据库。 我所做的研究在每种情况下都略有矛盾。
任何提示在哪里寻找和尝试什么都将是很棒的。
我相信您在这里寻求的不仅仅是解决方案。 我建议您创建一个表,该表将保存ftp负载的数据以及批处理ID(唯一标识符)。 创建另一个表,在其中使用状态列加载该批处理ID,如果您对表1进行ftp加载,则在此处插入一行,将状态设置为N。此轮询脚本应调用以下sp。
现在,从c#创建一个轮询脚本,或者如果您有使用SQL服务代理的经验,则可以使用批处理ID和状态为N的状态轮询此table2。
现在,创建另一个存储过程,该存储过程将仅汇总该批次ID的所有记录。 并将这些值适当地添加到每日计数中。.将同样执行每周计数和所有...
完成所有这些操作后,从table1中删除具有我们处理的批次ID的信息,如果您需要此信息以备将来使用,则可以将其存储在其他表中。
为了具有管理数据的能力并准备将来对业务规则进行任何更改,您需要在表中添加一些控制列。 控制周期/小时/天/月/年/ ...将来的控制
只需添加周期,就一次用相应的值填充相应的控制字段:
period 1..4
hour 1-24
day 1..366
week 1..55
month 1..12
year 1.. (if needed)
您可以定义一组SQL函数以一次填充这些列(在从文件加载数据的过程中)。
为这些列创建索引。
一旦完成此操作,您就可以通过c#代码/ sql代码,对任何时间段/小时/天/天进行动态汇总。..您可以受益于Analysis服务器/窗口函数/枢轴来做您的魔术: )在任意间隔的数据上。
除了存档目的和将来管理更改之外,这种方法使您能够保留数据,不删除数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.