使用Union all with time-range进行mysql查询时出现问题

问题描述 投票:0回答:1

我有两个带有

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
,它也可以工作。

sql mysql time-series
1个回答
0
投票

UNION 查询尝试返回列的最宽数据类型,该数据类型将涵盖相应选择中该列的所有数据类型。

如果使用日期时间相关函数,则结果数据类型是内部日期时间类型,具有微秒部分。

© www.soinside.com 2019 - 2024. All rights reserved.