<< Click to Display Table of Contents >> Navigation: Live > Agents > Transformation Agents > Data Deriver > Examples > exportSqlProcedure > Live Data Deriver Agent – DT_RESULT |
The following SERIES_FUNCTION_INFO calculates the monthly (frequency) average (value) of the DT_LOGGER_SERIES with LOGGER_SERIES_ID 32101231:
{
|
---|
-60 seconds (dateOffset) is added to each derived DT_LOGGER_DATUM.DATUM_UTC_DT (e.g., 2019-07-01 00:00:00 becomes 2019-06-30 23:59:00), bringing the monthly average back into the month that it is for. (Note: This data is exported to DT_RESULT, which requires DT_SAMPLE and DT_TEST rows, and DT_SAMPLE.SAMPLE_DATE and DT_TEST.ANALYSIS_DATE are SMALLDATETIMEs, which are rounded to the nearest minute.)
After the agent has finished deriving the monthly averages, and added the derived data to DT_LOGGER_DATUM, it executes the equis.copy_logger_datum_to_result_temp_c stored procedure (exportSqlProcedure).
The equis.copy_logger_datum_to_result_temp_c stored procedure takes the input parameters that the Data Deriver Agent provides, and adds the additional input parameters that the equis.copy_logger_datum_to_result stored procedure needs.
The equis.copy_logger_datum_to_result stored procedure copies the derived data from DT_LOGGER_DATUM to DT_RESULT (and also to DT_SAMPLE and DT_TEST). A NULL value is allowed for some of its input parameters (e.g., FACILITY_ID and SYS_LOC_CODE are obtained from the series, or logger, row if they are NULL, and DT_RESULT allows a NULL value in RESULT_UNIT), however, not all parameters can be NULL (e.g., DT_RESULT does NOT allow NULL values in CAS_RN).
Note, it is necessary to grant EXECUTE permission to 'Public' in the database to allow users to execute the stored procedure below.
Create stored procedure: [equis].[copy_logger_datum_to_result_temp_c]
IF OBJECT_ID(N'[equis].[copy_logger_datum_to_result_temp_c]') IS NOT NULL DROP PROCEDURE [equis].[copy_logger_datum_to_result_temp_c]; GO
CREATE PROCEDURE [equis].[copy_logger_datum_to_result_temp_c] ( @deriver_logger_series_id BIGINT ,@deriver_start_date DATETIME2(0) ,@deriver_end_date DATETIME2(0) ,@deriver_update_yn CHAR ) AS BEGIN EXEC equis.copy_logger_datum_to_result @deriver_logger_series_id, @deriver_start_date, @deriver_end_date, NULL, NULL, 'B', 'AIR', 'FIELD', 'N', 'NA', 'INITIAL', 'TEMP-C', 'TRG', 'DEG C'; END
|
---|
IF OBJECT_ID(N'[equis].[copy_logger_datum_to_result]') IS NOT NULL DROP PROCEDURE [equis].[copy_logger_datum_to_result]; GO
CREATE PROCEDURE [equis].[copy_logger_datum_to_result] ( @logger_series_id BIGINT -- dt_logger_datum, PK, FK (dt_logger_series), NOT NULL ,@start_date DATETIME2(0) -- dt_logger_datum.datum_utc_dt, PK, NOT NULL ,@end_date DATETIME2(0) -- dt_logger_datum.datum_utc_dt, PK, NOT NULL ,@facility_id BIGINT -- dt_sample/dt_test/dt_result, PK, FK (dt_facility), NOT NULL ,@sys_loc_code VARCHAR(20) -- dt_sample, FK (dt_location), NULL ,@sample_type_code VARCHAR(20) -- dt_sample, FK (rt_sample_type), NULL ,@matrix_code VARCHAR(10) -- dt_sample/dt_test.lab_matrix_code, FK (rt_matrix), NULL ,@analytic_method VARCHAR(20) -- dt_test, FK (rt_analytic_method), NOT NULL ,@fraction VARCHAR(10) -- dt_test, FK (rt_fraction), NULL ,@column_number VARCHAR(2) -- dt_test, NULL ,@test_type VARCHAR(10) -- dt_test, FK (rt_test_type), NULL ,@cas_rn VARCHAR(15) -- dt_result, PK, FK (rt_analyte), NOT NULL ,@result_type_code VARCHAR(10) -- dt_result, FK (rt_result_type), NOT NULL ,@result_unit VARCHAR(15) -- dt_result, FK (rt_unit.unit_code), NULL ) AS BEGIN IF @facility_id IS NULL BEGIN SELECT @facility_id = COALESCE(s.facility_id, l.facility_id) FROM dt_logger_series s INNER JOIN dt_logger l ON l.logger_id = s.logger_id WHERE s.logger_series_id = @logger_series_id; END
IF @sys_loc_code IS NULL BEGIN SELECT @sys_loc_code = COALESCE(s.sys_loc_code, l.sys_loc_code) FROM dt_logger_series s INNER JOIN dt_logger l ON l.logger_id = s.logger_id WHERE s.logger_series_id = @logger_series_id; END
DECLARE @datum TABLE ( datum_utc_dt DATETIME2(0) ,datum_value REAL ,sys_sample_code VARCHAR(40) ,sample_id BIGINT ,test_id BIGINT );
-- e.g., (datum_utc_dt, datum_value, sys_sample_code) = ('2001-02-03 04:05:06', 1.23, '123456,2001-02-03T04:05:06') INSERT INTO @datum (datum_utc_dt, datum_value, sys_sample_code) SELECT datum_utc_dt, datum_value, CONVERT(VARCHAR, logger_series_id) + ',' + CONVERT(VARCHAR, datum_utc_dt, 126) FROM dt_logger_datum WHERE logger_series_id = @logger_series_id AND datum_utc_dt BETWEEN @start_date AND @end_date;
-- dt_sample UPDATE d SET sample_id = s.sample_id FROM @datum d INNER JOIN dt_sample s ON s.sys_sample_code = d.sys_sample_code;
DECLARE @new_id_count BIGINT; DECLARE @new_id_start BIGINT; DECLARE @id BIGINT;
SELECT @new_id_count = COUNT(*) FROM @datum WHERE sample_id IS NULL;
IF @new_id_count > 0 BEGIN EXEC equis.get_ids @new_id_count, @new_id_start OUTPUT; SET @id = @new_id_start - 1;
UPDATE @datum SET sample_id = @id, @id = @id + 1 WHERE sample_id IS NULL;
INSERT INTO dt_sample (facility_id, sample_id, sys_sample_code, sys_loc_code, sample_type_code, sample_date, matrix_code) SELECT @facility_id, d.sample_id, d.sys_sample_code, @sys_loc_code, @sample_type_code, d.datum_utc_dt, @matrix_code FROM @datum d WHERE d.sample_id BETWEEN @new_id_start AND @new_id_start + @new_id_count - 1; END
-- dt_test UPDATE d SET test_id = t.test_id FROM @datum d INNER JOIN dt_test t ON t.sample_id = d.sample_id;
SELECT @new_id_count = COUNT(*) FROM @datum WHERE test_id IS NULL;
IF @new_id_count > 0 BEGIN EXEC equis.get_ids @new_id_count, @new_id_start OUTPUT; SET @id = @new_id_start - 1;
UPDATE @datum SET test_id = @id, @id = @id + 1 WHERE test_id IS NULL;
INSERT INTO dt_test (facility_id, test_id, sample_id, analytic_method, analysis_date, fraction, column_number, test_type, lab_matrix_code) SELECT @facility_id, d.test_id, d.sample_id, @analytic_method, d.datum_utc_dt, @fraction, @column_number, @test_type, @matrix_code FROM @datum d WHERE d.test_id BETWEEN @new_id_start AND @new_id_start + @new_id_count - 1; END
-- dt_result MERGE INTO dt_result r USING @datum d ON r.facility_id = @facility_id AND r.test_id = d.test_id AND r.cas_rn = @cas_rn WHEN MATCHED THEN UPDATE SET r.result_numeric = d.datum_value, r.result_type_code = @result_type_code, r.result_unit = @result_unit WHEN NOT MATCHED THEN INSERT (facility_id, test_id, cas_rn, result_numeric, result_type_code, result_unit) VALUES (@facility_id, d.test_id, @cas_rn, d.datum_value, @result_type_code, @result_unit); END
|
---|
Copyright © 2024 EarthSoft, Inc. • Modified: 02 Feb 2023