簡體   English   中英

在SQL Server 2014中對數據進行舍入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM