Mysql , 作为验证值的平均值(NO2) 来自nabelvalidated_pay 其中定时>1360236120000且定时
更改后,您将获得两行已验证读数和一行未验证读数。您使用的最后一组将对这两行进行分组,以获得验证读数。由于在select like max(mergedData.rawValue)中使用聚合函数,因此将获得所需的结果。好的,这似乎可行。但是,已验证的数据仍然显示在原始数据列中。你知道为什么吗?Mysql , 作为验证值的平均值(NO2) 来自nabelvalidated_pay 其中定时>1360236120000且定时,mysql,union,Mysql,Union,更改后,您将获得两行已验证读数和一行未验证读数。您使用的最后一组将对这两行进行分组,以获得验证读数。由于在select like max(mergedData.rawValue)中使用聚合函数,因此将获得所需的结果。好的,这似乎可行。但是,已验证的数据仍然显示在原始数据列中。你知道为什么吗? +-----------------+---------------------+--------------+ + PK [bigint(20)] + timed [bigint(20)] + NO2
+-----------------+---------------------+--------------+
+ PK [bigint(20)] + timed [bigint(20)] + NO2 [double] +
+-----------------+---------------------+--------------+
SELECT
mergedData.rawValue,
mergedData.validatedValue,
CAST(IF(mergedData.validatedValue IS NULL, mergedData.rawValue, mergedData.validatedValue) AS DECIMAL(65, 2)) as sensorValue,
timeValue,
IsValid
FROM
(SELECT
Month(FROM_UNIXTIME(timed / 1000)) as months,
Year(FROM_UNIXTIME(timed / 1000)) as years,
DAYOFMONTH(FROM_UNIXTIME(timed / 1000)) as days,
HOUR(FROM_UNIXTIME(timed / 1000)) as hours,
MINUTE(FROM_UNIXTIME(timed / 1000)) as minutes,
avg(NO2) as rawValue,
FROM_UNIXTIME(timed / 1000) as timeValue,
IF(NO2 IS NOT NULL, 1, 0) as IsValid,
NULL as validatedValue
FROM
nabelnrt_pay
WHERE
timed > 1360236120000
AND timed < 1391772120000
GROUP BY years, months, days
UNION
SELECT
Month(FROM_UNIXTIME(timed / 1000)) as months,
Year(FROM_UNIXTIME(timed / 1000)) as years,
DAYOFMONTH(FROM_UNIXTIME(timed / 1000)) as days,
HOUR(FROM_UNIXTIME(timed / 1000)) as hours,
MINUTE(FROM_UNIXTIME(timed / 1000)) as minutes,
avg(NO2) as validatedValue,
FROM_UNIXTIME(timed / 1000) as timeValue,
IF(NO2 IS NOT NULL, 1, 0) as IsValid,
NULL as rawValue
FROM
nabelvalidated_pay
WHERE
timed > 1360236120000
AND timed < 1391772120000
GROUP BY years, months, days) as mergedData ORDER BY timeValue
SELECT max(mergedData.rawValue),
max(mergedData.validatedValue),
CAST(IF(mergedData.validatedValue IS NULL, mergedData.rawValue, mergedData.validatedValue) AS DECIMAL(65, 2)) as sensorValue,
timeValue,
IsValid
FROM ((SELECT Month(FROM_UNIXTIME(timed / 1000)) as months,
Year(FROM_UNIXTIME(timed / 1000)) as years,
DAYOFMONTH(FROM_UNIXTIME(timed / 1000)) as days,
HOUR(FROM_UNIXTIME(timed / 1000)) as hours,
MINUTE(FROM_UNIXTIME(timed / 1000)) as minutes,
avg(NO2) as rawValue,
FROM_UNIXTIME(timed / 1000) as timeValue,
IF(NO2 IS NOT NULL, 1, 0) as IsValid,
NULL as validatedValue
FROM nabelnrt_pay
WHERE timed > 1360236120000 AND timed < 1391772120000
GROUP BY years, months, days
)
UNION ALL
(SELECT Month(FROM_UNIXTIME(timed / 1000)) as months,
Year(FROM_UNIXTIME(timed / 1000)) as years,
DAYOFMONTH(FROM_UNIXTIME(timed / 1000)) as days,
HOUR(FROM_UNIXTIME(timed / 1000)) as hours,
MINUTE(FROM_UNIXTIME(timed / 1000)) as minutes,
avg(NO2) as validatedValue,
FROM_UNIXTIME(timed / 1000) as timeValue,
IF(NO2 IS NOT NULL, 1, 0) as IsValid,
NULL as rawValue
FROM nabelvalidated_pay
WHERE timed > 1360236120000 AND timed < 1391772120000
GROUP BY years, months, days
)
) as mergedData
GROUP BY years, months, days
ORDER BY timeValue
SELECT max(mergedData.rawValue),
max(mergedData.validatedValue),
CAST(IF(max(mergedData.validatedValue) IS NULL, max(mergedData.rawValue),
max(mergedData.validatedValue)) AS DECIMAL(65, 2)) as sensorValue,
max(timeValue),
max(IsValid)
FROM ((SELECT Month(FROM_UNIXTIME(timed / 1000)) as months,
Year(FROM_UNIXTIME(timed / 1000)) as years,
DAYOFMONTH(FROM_UNIXTIME(timed / 1000)) as days,
HOUR(FROM_UNIXTIME(timed / 1000)) as hours,
MINUTE(FROM_UNIXTIME(timed / 1000)) as minutes,
avg(NO2) as rawValue,
FROM_UNIXTIME(timed / 1000) as timeValue,
0 IsValid,
NULL as validatedValue
FROM nabelnrt_pay
WHERE timed > 1360236120000 AND timed < 1391772120000
GROUP BY years, months, days
)
UNION ALL
(SELECT Month(FROM_UNIXTIME(timed / 1000)) as months,
Year(FROM_UNIXTIME(timed / 1000)) as years,
DAYOFMONTH(FROM_UNIXTIME(timed / 1000)) as days,
HOUR(FROM_UNIXTIME(timed / 1000)) as hours,
MINUTE(FROM_UNIXTIME(timed / 1000)) as minutes,
NULL as rawValue,
FROM_UNIXTIME(timed / 1000) as timeValue,
1 AS IsValid,
avg(NO2) as validatedValue
FROM nabelvalidated_pay
WHERE timed > 1360236120000 AND timed < 1391772120000
GROUP BY years, months, days
)
) as mergedData
GROUP BY years, months, days
ORDER BY timeValue