地图/采样时间序列数据到另一个时间系列db2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了地图/采样时间序列数据到另一个时间系列db2相关的知识,希望对你有一定的参考价值。

我试图结合两个SQL(IBM on bluemix上的DB2)查询的结果:

第一个查询创建一个从startdate到enddate的时间序列:

with dummy(minute) as (
      select TIMESTAMP('2017-01-01')
      from SYSIBM.SYSDUMMY1 union all
      select minute + 1 MINUTES
      from dummy
      where minute <= TIMESTAMP('2018-01-01')
     )
select to_char(minute, 'DD.MM.YYYY HH24:MI') AS minute
from dummy;

第二个查询从具有时间戳的表中选择数据。此数据应与上面生成的时间序列连接。独立查询如下:

SELECT DISTINCT
  to_char(date_trunc('minute', TIMESTAMP), 'DD.MM.YYYY HH24:MI') AS minute,
  VALUE AS running_ct
FROM TEST
WHERE ID = 'abc'
AND NAME = 'sensor'
ORDER BY minute ASC;

我想要得到的是一个包含两列结果的查询:

  • 第一列,时间戳从startdate到enddate和
  • 第二个具有按自己的时间戳排序的值
  • 第一列(空时间戳= null)。

我怎么能这样做?

答案

更好的解决方案,特别是如果您的详细信息表很大,是生成一个范围。这允许优化器使用索引来完成bucketing,而不是在每一行上调用一个函数(这很昂贵)。

所以像这样:

WITH dummy(temporaer, rangeEnd) AS (SELECT a, a + 1 MINUTE 
                                    FROM (VALUES(TIMESTAMP('2017-12-01'))) D(a)
                                    UNION ALL
                                    SELECT rangeEnd, rangeEnd + 1 MINUTE
                                    FROM dummy
                                    WHERE rangeEnd < TIMESTAMP('2018-01-31'))
SELECT Dummy.temporaer, AVG(Test.value) AS TEXT
FROM Dummy
LEFT OUTER JOIN Test
             ON Test.timestamp >= Dummy.temporaer
                AND Test.timestamp < Dummy.rangeEnd
                AND Test.id = 'abc'
                AND Test.name = 'text'
GROUP BY Dummy.temporaer
ORDER BY Dummy.temporaer ASC;

请注意,范围的结束现在是独占的,不像之前那样具有包容性:你包括'2018-01-31'的第一分钟,这可能不是你想要的。当然,除了一个月的最后一天也让我觉得有点奇怪 - 你很可能真的想要< TIMESTAMP('2018-02-01')

另一答案

找到了有效的解决方案

    with dummy(temporaer) as (
     select TIMESTAMP('2017-12-01') from SYSIBM.SYSDUMMY1
     union all
     select temporaer + 1 MINUTES from dummy where temporaer <= TIMESTAMP('2018-01-31'))
    select temporaer, avg(VALUE) as text from dummy
    LEFT OUTER JOIN TEST ON temporaer=date_trunc('minute', TIMESTAMP) and ID='abc' and NAME='text'
    group by temporaer
    ORDER BY temporaer ASC;

干杯

以上是关于地图/采样时间序列数据到另一个时间系列db2的主要内容,如果未能解决你的问题,请参考以下文章

SuperMap系列——GIS数据之地图瓦片

自动卸载/加载 DB2 数据库所有表的工具

从一个数据库更新到另一个,有条件

DB2 将一列值复制到另一列

使用 Dart 和 Flutter,我如何将动态小部件中的数据保存到另一个列表中的地图列表中

为啥移动 std::map 无法将元素从一个地图移动到另一个地图