我有两个带有
Union All
子句的查询,如下所示,
SELECT json_arrayagg(obj) as RESULT FROM (
SELECT
json_object(
"points", json_arrayagg(json_array(
UNIX_TIMESTAMP(timestamping)*1000,
CONVERT(ROUND(P1,4), DECIMAL(9,4))
))
) AS obj
FROM
mytable
WHERE
timestamping between '2021-10-01T00:00:00.000Z'
AND
'2022-05-10T23:59:59.999Z'
UNION ALL
SELECT
json_object(
"datapoints", json_arrayagg(json_array(
UNIX_TIMESTAMP(timestamping)*1000,
CONVERT(ROUND(P2,4), DECIMAL(9,4))
))
) AS obj
FROM
mytable
WHERE
timestamping between '2021-10-01T00:00:00.000Z'
AND
'2022-05-10T23:59:59.999Z'
) x
结果为空,如下所示,
但是但是但是
如果我一一执行上面两个查询,我的意思是不使用
Union All
,它会成功执行,如下所示,
第一个查询,
SELECT json_arrayagg(obj) as RESULT FROM (
SELECT
json_object(
"points", json_arrayagg(json_array(
UNIX_TIMESTAMP(timestamping)*1000,
CONVERT(ROUND(P1,4), DECIMAL(9,4))
))
) AS obj
FROM
mytable
WHERE
timestamping between '2021-10-01T00:00:00.000Z'
AND
'2022-05-10T23:59:59.999Z'
) x
是的,以上查询有效。
第二次查询,
SELECT json_arrayagg(obj) as RESULT FROM (
SELECT
json_object(
"datapoints", json_arrayagg(json_array(
UNIX_TIMESTAMP(timestamping)*1000,
CONVERT(ROUND(P2,4), DECIMAL(9,4))
))
) AS obj
FROM
mytable
WHERE
timestamping between '2021-10-01T00:00:00.000Z'
AND
'2022-05-10T23:59:59.999Z'
) x
是的,它有效。
我不知道出了什么问题。无法识别。
基本上,如果我增加时间段,它就会停止工作。对于较小的日期范围,它可以工作。
DEMO - 仅供参考,因为我无法用示例数据重现实际问题。
注意:在顶部代码片段(带有
union all
子句示例)中,如果我将结束时间从2022-05-10T23:59:59.999Z
更改为2022-05-09T23:59:59.999Z
,然后使用union all
,它也可以工作。
UNION 查询尝试返回列的最宽数据类型,该数据类型将涵盖相应选择中该列的所有数据类型。
如果使用日期时间相关函数,则结果数据类型是内部日期时间类型,具有微秒部分。