CREATE PROCEDURE [dbo].[Record_SteamPointData] AS BEGIN declare @begin_time datetime declare @end_time datetime declare @dateinfo datetime; set @begin_time = DATEADD(hh, -1, GETDATE()); set @end_time = DATEADD(hh, -0, GETDATE()); set @dateinfo = GETDATE(); WITH LatestSteam AS ( SELECT T1.monitor_code, T1.steam_flow, ROW_NUMBER() OVER (PARTITION BY T1.monitor_code ORDER BY T1.collect_time DESC) AS rn FROM ems_record_steam_instant T1 WHERE T1.collect_time BETWEEN DATEADD(HH, -1, @dateinfo) AND DATEADD(HH, 0, @dateinfo) ), LatestReport AS ( SELECT E1.monitor_code, E1.begin_time, E1.instrument_value, ROW_NUMBER() OVER (PARTITION BY E1.monitor_code ORDER BY E1.begin_time DESC) AS rn FROM ems_report_point_steam E1 ) INSERT INTO ems_report_point_steam (monitor_code, expend, instrument_value, begin_time, end_time, record_time) SELECT t1.monitor_code AS monitor_code, CONVERT(DECIMAL(18, 2), ISNULL((t3.steam_flow - t4.instrument_value), 0)) AS expend, ISNULL(t3.steam_flow, 0) AS instrument_value, DATEADD(HH, -1, @dateinfo) AS begin_time, DATEADD(HH, 0, @dateinfo) AS end_time, CONVERT(VARCHAR(30), DATEADD(HH, -1, @dateinfo), 120) AS record_time FROM ems_base_monitor_info t1 LEFT JOIN LatestSteam t3 ON t1.monitor_code = t3.monitor_code AND t3.rn = 1 LEFT JOIN LatestReport t4 ON t1.monitor_code = t4.monitor_code AND t4.rn = 1; END; GO