我有每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');
});
});
});
答案 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
我们的想法是,我们在每个日期和时间内根据时间对行进行排序,然后我们可以在每个这样的分区中选择第一个。