问题是你正在得到
两者
最终数据中的行。你需要再次聚合。此外,由于您希望在最终结果中包含这两个值,因此应该使用
union all
而不是
union
.
联盟
删除重复项,这是不必要的,因为两个子查询之间的行不会相同:
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