在跟發電廠做輔助決策系統時,涉及到電量結算問題。電廠方只提供實時的每分鐘的電力資料,我方要根據電力
來算出每一時段的電量(以一刻鐘為一時段,一天96時段)。
涉及到兩個問題:
1.從電廠端oracle資料庫中把yxrtdata實時表的資料採集到本地sqlserver,並作為歷史表儲存
2.在本地處理裡yxrtdata表把在一刻鐘內的電力積分成電量,然後分解時間字段,對應到競價輔助決策系統
資料庫check_machine_quantity表的主鍵,最後插入記錄。
電廠端oracle資料庫,所要採集的表結構:
create table [dbo].[yxrtdata] (
[id] [decimal](10, 0) not null ,
[gcwzdm] [char] (24) collate chinese_prc_ci_as not null ,
[sz] [decimal](1, 0) null ,
[sj] [datetime] null
) 競價輔助決策系統資料庫(sqlserver2000)
被插入的表結構
create table [dbo].[check_machine_quantity] (
[year] [char] (4) collate chinese_prc_ci_as not null ,
[month] [char] (2) collate chinese_prc_ci_as not null ,
[day] [char] (2) collate chinese_prc_ci_as not null ,
[period_id] [numeric](10, 0) not null ,
[power_plant_id] [numeric](10, 0) not null ,
[machine_no] [numeric](10, 0) not null , --以上是主鍵
[check_machine_quantity_exam_quantity] [numeric](15, 4) null ,--要插入的電量
……………………
) 第乙個問題的解決思路:在sqlserver2000建立作業,實現每分鐘採集資料。
第二個問題的解決思路:對一刻鐘內的sz列求和公式為:sum(sz)*60.0/3600.0/10.0,單位為(萬千瓦時),sz的單位為(兆千瓦).取sj的時間部分(小時,分鐘)求出所在的段(一天共96個時段).以防對方資料晚採,對歷史表的處理時間段為取得最大時間的前30分鐘.
一下是處理過程的部分**。
declare @maxtime as datetime,
@powerplantid as decimal,
@periodid as decimal,
@machineno as decimal,
@starttime as datetime,
@endtime as datetime,
@quantity as decimal(15,6)
set @powerplantid=32 --電廠id,若其他電廠修改.
select @maxtime=max(sj) from ycrtdata
--取最近一刻時間
set @maxtime=dateadd(minute,-convert(decimal,datepart(minute,@maxtime)%15),@maxtime)
--設定起始時間
set @starttime=dateadd(minute,-30,@maxtime)
set @endtime=dateadd(minute,15,@starttime)
--轉為第幾時段
set @periodid=(convert(decimal,datepart(hour,@starttime))*60+convert(decimal,datepart
(minute,@starttime)))/15+1
--處理1#機對應id=207
select @quantity=sum(sz)*60.0/3600.0/10.0 from ycrtdata where id=207 and sj>=@starttime and
sj<@endtime
insert into gboss..check_machine_quantity
(year,month,day,period_id,power_plant_id,machine_no,check_machine_quantity_exam_quantity)
values(year(@starttime),month(@starttime),day
(@starttime),@periodid,@powerplantid,1,@quantity)
--delete from ycrtdata where id=207 and sj>=@starttime and sj<@endtime
在sqlserver中新建作業,每15分鐘執行一次。 這樣就可以實現電力積分,轉為電量存到check_machine_quantity的表中的重複作業排程。
SQLSERVER2000技術規格
sqlserver2000技術規格 系統技術規格 每個伺服器最多可以允許16個sqlserver例項 每個例項可擁有 2147483467 個鎖 資料庫技術規格 sqlserver的資料庫大小1048516tb 每個資料庫可擁有的檔案組數32767 每個資料庫可擁有的檔案組數256 檔案大小 資料檔...
SQLSERVER2000啟動失敗
服務管理器中啟動sqlserver服務 彈出視窗的錯誤資訊是 本地計算機上的mssqlserver服務啟動後又停止了。一些服務自動停止,如果它們沒有什麼可做的,例如 效能日誌和警報 服務 1 解決方法 調整系統時間到你上一次能夠正常啟動的時間,啟動sqlserver服務,成功後,然後再把時間調回來。...
SQLSERVER2000技術規格
quote 系統技術規格 每個伺服器最多可以允許16個sqlserver例項 每個例項可擁有 2147483467 個鎖 資料庫技術規格 sqlserver的資料庫大小1048516tb 每個資料庫可擁有的檔案組數32767 每個資料庫可擁有的檔案組數256 檔案大小 資料檔案 32tb 夠大了吧,...