编写问题使用nodejs选择查询

时间:2014-07-16 19:46:59

标签: javascript sql node.js db2 db2-luw

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

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

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

CREATE TABLE TOTALS(

  SQLDB_POOLED INT,
  SQLDB_MAX  INT,
  SQLDB_ASSIGNED INT,

  SQLDB_TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP  
  ) ;  

的node.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');
        });
      });
    });

1 个答案:

答案 0 :(得分: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

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