0

我有每 5 分钟运行一次的 node.js 脚本,并将数据插入下表。我在 IBM Db2 数据库中使用时间戳数据类型来识别每一行。

我正在尝试在 node.js 中编写一个查询,该查询将连接到该表并每小时显示数据。我在理解如何选择行时遇到了麻烦,因为一天中的不同时间会有多行,因为它每 5 分钟运行一次。我正在尝试编写一个逻辑,它将在表中选择每小时的第一行并显示它。因此,一天将返回 24 行。

我可以选择每个小时的第一行,也可以对每个小时进行平均计算。但是,我很困惑如何为此编写查询。有人可以帮我理解我应该使用什么吗?

CREATE TABLE TOTALS(

  SQLDB_POOLED INT,
  SQLDB_MAX  INT,
  SQLDB_ASSIGNED INT,

  SQLDB_TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP  
  ) ;  

节点.js

ibmdb.open(dsnString, function (err,conn) {

      if (err) return console.log(err);

      conn.query('select SQLDB_MAX,SQLDB_ASSIGNED,(SQLDB_ASSIGNED + SQLDB_POOLED) As SUMOFAP from TOTALS, function (err, data) {
        if (err) console.log(err);

        console.log(data);
        res.send(JSON.stringify(data));

        conn.close(function () {
          console.log('done');
        });
      });
    });
4

1 回答 1

0

这是一种可能性:

select SQLDB_MAX,SQLDB_ASSIGNED, (SQLDB_ASSIGNED + SQLDB_POOLED) As SUMOFAP 
from (
    select SQLDB_MAX, SQLDB_ASSIGNED, SQLDB_POOLED
         , row_number() over ( partition by date(SQLDB_TIMESTAMP)
                                          , hour(SQLDB_TIMESTAMP)
                               order by SQLDB_TIMESTAMP ) as rn
    from TOTALS
) where rn = 1

这个想法是我们在每个日期和小时内根据它们的时间对行进行排序,然后我们可以在每个这样的分区中选择第一个。

于 2014-07-17T05:27:04.397 回答