C# SQL Server 2014中的数据汇总

C# SQL Server 2014中的数据汇总,c#,sql,sql-server,stored-procedures,sql-server-2014,C#,Sql,Sql Server,Stored Procedures,Sql Server 2014,我使用SQL Server 2014作为数据库,在C#(ASP.NET 4.0)中开发了一个应用程序 我对数据的四舍五入和求和有疑问。我有通过FTP通过CSV输入的数据,我将原始数据导入表中。客户每分钟记录一次数据。数据由客户Id标识 我现在被要求获取这些数据,并将时间序列数据从一小时算起,分为15分钟 然后,他们希望将数据四舍五入到几天(午夜到午夜),然后将数据四舍五入到几周(周一到周日)。他们还希望将日数据四舍五入为从午夜到午夜的日历月,并将月数据四舍五入为一年 其思想是将原始时间序列数据分

我使用SQL Server 2014作为数据库,在C#(ASP.NET 4.0)中开发了一个应用程序

我对数据的四舍五入和求和有疑问。我有通过FTP通过CSV输入的数据,我将原始数据导入表中。客户每分钟记录一次数据。数据由客户Id标识

我现在被要求获取这些数据,并将时间序列数据从一小时算起,分为15分钟

然后,他们希望将数据四舍五入到几天(午夜到午夜),然后将数据四舍五入到几周(周一到周日)。他们还希望将日数据四舍五入为从午夜到午夜的日历月,并将月数据四舍五入为一年

其思想是将原始时间序列数据分组为其组成的时段,如日、周、月,以便它们可以看到该时段的总数

我看过SQL中的游标和循环,有人告诉我开销太大了,因为我已经有3亿行要处理了

我不知道是应该用C语言开发一个在服务器上完成所有工作的服务,还是使用数据库。我所做的研究在每种情况下都有轻微的自相矛盾


任何提示都会很好,比如在哪里查找和尝试什么。

我相信您在这里寻找的更多的是设计,而不是解决方案。 我建议您创建一个表,其中包含ftp加载的数据以及批处理id(唯一标识符)。 创建另一个表,在该表中加载带有状态列的批处理id,如果未将ftp加载到表中,请在此插入一行1,使状态为N。此轮询脚本应调用下面的sp

现在,从c#创建一个轮询脚本,或者如果您对sql中的ServiceBroker有经验,那么使用该脚本,以批id和状态为N的方式轮询此表2

现在,创建另一个存储过程,它将仅汇总此批次id的所有记录。并将这些值适当地添加到每日计数中。。 同样的工作也将在每周盘点和所有


完成所有这些操作后,从表1中删除带有我们处理的批次id的信息,如果您将来需要这些信息,您可以将其保存在不同的表中。

我相信您在这里寻找的更多的是设计而不是解决方案。 我建议您创建一个表,其中包含ftp加载的数据以及批处理id(唯一标识符)。 创建另一个表,在该表中加载带有状态列的批处理id,如果未将ftp加载到表中,请在此插入一行1,使状态为N。此轮询脚本应调用下面的sp

现在,从c#创建一个轮询脚本,或者如果您对sql中的ServiceBroker有经验,那么使用该脚本,以批id和状态为N的方式轮询此表2

现在,创建另一个存储过程,它将仅汇总此批次id的所有记录。并将这些值适当地添加到每日计数中。。 同样的工作也将在每周盘点和所有


完成所有这些操作后,请使用我们处理的批次id从表1中删除信息,如果您将来需要此信息,您可以将其保存在不同的表中。

要具有管理数据的功能并为将来的业务规则更改做好准备,您需要向表中添加一些控制列。 控制管理期间/小时/日/月/年/。。。不管将来怎么样

仅在添加句点时,使用相应的值一次填充一次相应的控制字段:

period 1..4
hour 1-24
day 1..366
week 1..55
month 1..12
year 1.. (if needed)
您可以定义一组SQL函数来一次性填充这些列(在从文件加载数据期间)

为这些列创建索引

一旦你这样做了,你就可以通过,c代码/sql代码,动态地对任何时间段/小时/天进行总结。。。。。 您可以从分析服务器/窗口函数/数据透视中获益,从而在任何时间间隔内对数据执行以下操作:)


这种方法使您能够保留数据,不进行删除,但存档和管理将来的更改除外。

要拥有管理数据的能力并为将来的业务规则更改做好准备,您需要向表中添加一些控制列。 控制管理期间/小时/日/月/年/。。。不管将来怎么样

仅在添加句点时,使用相应的值一次填充一次相应的控制字段:

period 1..4
hour 1-24
day 1..366
week 1..55
month 1..12
year 1.. (if needed)
您可以定义一组SQL函数来一次性填充这些列(在从文件加载数据期间)

为这些列创建索引

一旦你这样做了,你就可以通过,c代码/sql代码,动态地对任何时间段/小时/天进行总结。。。。。 您可以从分析服务器/窗口函数/数据透视中获益,从而在任何时间间隔内对数据执行以下操作:)


这种方法使您能够保留数据,不进行删除,只是为了存档和管理将来的更改。

谢谢。我从未想过使用ServiceBroker。我会让你知道我进展如何的。谢谢。我从未想过使用ServiceBroker。我会告诉你我的进展。有很多方法可以做你想做的事情,我认为循环和C#可能是最糟糕的方法。关键问题是:汇总数据需要如何更新?例如,您可以在SSAS表格中定义所有这些总结行为,每隔十分钟左右构建一次,并在其中完成分组。它擅长处理大量数据并以增量方式加载数据。这是一个学习曲线,但如果你要对大量数据进行操作,你需要从C#/loop顶部空间中取出数据。有很多方法可以做你想做的事情,我认为循环和C#可能是最糟糕的方法。关键问题是:汇总数据需要如何更新?例如,您可以在SSAS表格中定义所有这些总结行为,每十分钟左右构建一次,并在t中完成分组