我有我的選擇一些困惑:DOUBLE被返回BLOB
SELECT
mergedData.rawValue,
mergedData.validatedValue,
IFNULL(mergedData.validatedValue, mergedData.rawValue) as mergedValue
FROM
[...]
雖然mergedData.rawValue
和mergedData.validatedValue
回報DOUBLE的IFNULL
語句返回BLOB。爲什麼會發生?我怎麼才能讓它返回一個DOUBLE呢?
編輯: 我通過模擬FULL JOIN
合併兩個在我的Select中具有完全相同結構的表。的數據存儲爲兩個表中一個雙重:
TableRawData(NOX被加載到mergedData.rawValue):
timed (BIGINT(20)) --- NOX (DOUBLE)
1380583800000 8.972167
TableValidatedData(NOX被加載到mergedData.validatedValue):
timed (BIGINT(20)) --- NOX (DOUBLE)
1380583800000 9.506166
EDIT2:我的全SELECT:
SET @StartTime = 1356998400000;
SET @EndTime = 1386546000000;
SELECT
mergedData.rawValue,
mergedData.validatedValue,
CAST(IFNULL(mergedData.validatedValue, mergedData.rawValue) AS DECIMAL(10, 5)) as mergedValue
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,
IF(true, avg(NOX), null) as rawValue,
FROM_UNIXTIME(timed/1000) as timeValue,
IF(true, 1, 0) as IsValid,
NULL as validatedValue
FROM
nabelnrt_bas
WHERE
timed > @StartTime
AND timed < @EndTime
GROUP BY concat(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,
IF(true, avg(NOX), null) as validatedValue,
FROM_UNIXTIME(timed/1000) as timeValue,
IF(true, 1, 0) as IsValid,
NULL as rawValue
FROM
nabelvalidated_bas
WHERE
timed > @StartTime
AND timed < @EndTime
GROUP BY concat(years, months, days))) as mergedData
快,讓你的表結構 –
@AlmaDo更新的問題 – RononDex
我不知道你的數據的裝置和它從何而來,但如果兩個表格描述了幾乎相同的數據(看起來),爲什麼不使用'NOX_raw'和'NOX_validated DEFAULT NULL'(我的答案仍然適用)。這將爲您節省合併桌子的痛苦。 – AmazingDreams