在Firebird 2.5中,我有一个硬件设备事件表;每一行都包含时间戳、设备ID和事件的整数状态。我需要在指定的日期范围内检索具有非0状态的ID子集的行集,以及每个ID的非0事件的实例数。我可以获得在指定日期范围内具有非0状态的ID的子集,但我不知道如何获得与同一行集中的每个ID关联的非0状态行的计数。如果可能的话,我更喜欢在查询中而不是在存储过程中执行此操作。
表格为:
RPR_HISTORY
TSTAMP timestamp
RPRID integer
PARID integer
LASTRES integer
LASTCUR float
我想要的行集就像
RPRID ERRORCOUNT
-------------------
18 4
19 2
66 7
查询
select distinct RPRID from RPR_HISTORY
where (LASTRES <> 0)
and (TSTAMP >= :STARTSTAMP);
给了我要找的ID,但显然不是每个ID的非0状态行数。我已经尝试了从上面派生的嵌套查询的组合;所有生成错误,通常是分组或聚合错误。这似乎是一件简单的事情,但我只是逃避了。
明白了!查询
select rh.RPRID, count(rh.RPRID) from RPR_HISTORY rh
where (rh.LASTRES <> 0)
and (rh.TSTAMP >= :STARTSTAMP)
and rh.RPRID in
(select distinct rd.RPRID from RPR_HISTORY rd where rd.LASTRES <> 0)
group by rh.RPRID;
返回我需要的行集。