Hi there.
I need your appreciated help.
I have this records in the mysql table listfiles_2011_11_25:
CODE_A myDate max_STATUS max_date INC_H2 INC_CH4 INC_C2H6 INC_C2H4 INC_C2H2 INC_CO INC_CO2
5550 2005-10-27 ALERT 2009-07-28 -0.022 0.067 0.044 0.089 0.022 0.422 11.267
5550 2003-10-07 OK 2005-10-27 -3.500 -5.917 -4.500 -4.625 0.125 -5.542 -60.250
This is the output with this query:
SELECT
t.CODE_A
, t.myDate
, m.max_STATUS
, m.max_date
, m.max_H2_PPM , t.H2_PPM
, FORMAT((max_H2_PPM-t.H2_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_H2
, m.max_CH4_PPM , t.CH4_PPM
, FORMAT((max_CH4_PPM-t.CH4_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_CH4
, m.max_C2H6_PPM , t.C2H6_PPM
, FORMAT((max_C2H6_PPM-t.C2H6_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_C2H6
, m.max_C2H4_PPM , t.C2H4_PPM
, FORMAT((max_C2H4_PPM-t.C2H4_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_C2H4
, m.max_C2H2_PPM , t.C2H2_PPM
, FORMAT((max_C2H2_PPM-t.C2H2_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_C2H2
, m.max_CO_PPM , t.CO_PPM , FORMAT((max_CO_PPM-t.CO_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_CO
, m.max_CO2_PPM , t.CO2_PPM , FORMAT((max_CO2_PPM-t.CO2_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) inc_CO2
FROM
( SELECT
CODE_A
, MAX(myDate) max_date
, MAX(STATUS) max_STATUS
, MAX(H2_PPM) max_H2_PPM
, MAX(CH4_PPM) max_CH4_PPM
, MAX(C2H6_PPM) max_C2H6_PPM
, MAX(C2H4_PPM) max_C2H4_PPM
, MAX(C2H2_PPM) max_C2H2_PPM
, MAX(CO_PPM) max_CO_PPM
, MAX(CO2_PPM) max_CO2_PPM
FROM
listfiles_2011_11_25
GROUP BY CODE_A, myDate) m
INNER JOIN listfiles_2011_11_25 t ON m.CODE_A = t.CODE_A
AND (m.max_date > t.myDate)
AND t.CODE_A = '5550'
GROUP BY t.CODE_A, myDate
ORDER BY t.ID DESC;
I have to compare values inc_H2, inc_CH4, inc_C2H6, inc_C2H4, inc_C2H2, inc_CO, inc_CO2 with this values:
inc_H2 inc_CH4 inc_C2H6 inc_C2H4 inc_C2H2 inc_CO inc_CO2
11 10 8 13 4 90 850
If only one value is out of range I need update the field' STATUS of the mysql table listfiles_2011_11_25withALERTelse it'sOK`.
I try this query, but even nothing value is out of range the field' STATUS not change from ALERTtook` in the first record.
What wrong?
Can you help me?
UPDATE listfiles_2011_11_25 t
INNER JOIN
( SELECT
CODE_A
, MAX(STATUS) max_STATUS
, MAX(myDate) max_date
, MAX(H2_PPM) max_H2_PPM
, MAX(CH4_PPM) max_CH4_PPM
, MAX(C2H6_PPM) max_C2H6_PPM
, MAX(C2H4_PPM) max_C2H4_PPM
, MAX(C2H2_PPM) max_C2H2_PPM
, MAX(CO_PPM) max_CO_PPM
, MAX(CO2_PPM) max_CO2_PPM
FROM listfiles_2011_11_25
GROUP BY CODE_A, myDate) m
ON m.CODE_A = t.CODE_A
AND (m.max_date > t.myDate)
AND (t.CODE_A <>'' AND t.CODE_A <> '0')
SET
, t.STATUS =
IF(
FORMAT((max_H2_PPM-t.H2_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 11 OR
FORMAT((max_CH4_PPM-t.CH4_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 10 OR
FORMAT((max_C2H6_PPM-t.C2H6_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 8 OR
FORMAT((max_C2H4_PPM-t.C2H4_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 13 OR
FORMAT((max_C2H2_PPM-t.C2H2_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 4 OR
FORMAT((max_CO_PPM-t.CO_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 90 OR
FORMAT((max_CO2_PPM-t.CO2_PPM)/PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM m.max_date)
, EXTRACT(YEAR_MONTH FROM t.myDate)),3) > 850
, 'ALERT', 'ok')
WHERE t.CODE_A like '%5550%';