出發點:與數據相關的查詢、統計、分析操作交給數據庫自己完成。前臺訪問的時候,直接調用具體的函數,確保傳的參數準確即可。
/*
查詢每小時能耗數據
P_BuildID:樓宇代碼
P_EnergyCode:能源類型,支持模糊查詢
P_StartDate:統計起始時間
P_EndDate:統計結束時間
用例:SELECT F_HourValue,F_CollectTime FROM EMS.QueryEneryItemHourResult('110108A001','01%','2015-03-23','2015-03-24');
*/
CREATE FUNCTION QueryEneryItemHourResult(@P_BuildID char(10),@P_EnergyCode varchar(5),@P_StartDate datetime,@P_EndDate datetime)
RETURNS @EneryItemHourResult TABLE (F_HourValue numeric(18,4),F_CollectTime datetime) AS
BEGIN
WITH C AS(
SELECT (F_OrigValue-MAX(F_OrigValue) OVER(PARTITION BY OrigValue.F_MeterID ORDER BY F_CollectTime ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)) AS HourValue,
F_CollectTime,
F_EnergyItemCode
FROM EMS.T_OV_MeterOrigValue AS OrigValue
LEFT JOIN EMS.T_ST_MeterEnergyItemInfo AS MeterEnergy
ON OrigValue.F_MeterID = MeterEnergy.F_MeterID
WHERE F_BuildID=@P_BuildID
AND OrigValue.F_CollectTime BETWEEN @P_StartDate AND @P_EndDate
AND DATEPART(MINUTE,F_CollectTime)=0
AND F_EnergyItemCode LIKE @P_EnergyCode
)
INSERT INTO @EneryItemHourResult
SELECT SUM(C.HourValue) AS HourValue,C.F_CollectTime
FROM C
GROUP BY C.F_CollectTime
RETURN
END
/*
查詢昨天每小時能耗數據
P_BuildID:樓宇代碼
P_EnergyCode:能源類型,支持模糊查詢
用例:SELECT F_HourValue,F_CollectTime FROM EMS.QueryYesterdayEneryItemHourResult('110108A001','01%');
*/
CREATE FUNCTION QueryYesterdayEneryItemHourResult(@P_BuildID char(10),@P_EnergyCode varchar(5))
RETURNS @YesterdayEneryItemHourResult TABLE (F_HourValue numeric(18,4),F_CollectTime datetime) AS
BEGIN
DECLARE @P_EndDate datetime = CONVERT(varchar(10),GETDATE(),111)
DECLARE @P_StartDate datetime = CONVERT(varchar(10),DATEADD(DAY,-1,@P_EndDate),111)
INSERT INTO @YesterdayEneryItemHourResult
SELECT F_HourValue,F_CollectTime
FROM EMS.QueryEneryItemHourResult(@P_BuildID,@P_EnergyCode,@P_StartDate,@P_EndDate)
RETURN
END