仅显示从某个时间范围开始增加的记录

Only display records that have incremented from a certain time frame

在我的数据库中有一个 table、ITEM_POWER,它包括 ID #、READ_TIME 和 POWER_COUNT。

每次项目关闭时,它都会在 table 中递增 POWER_COUNT + 1。如果一个项目从未关闭,它可能有 0 POWER_COUNT,如果它关闭 1000 次,它可能有 1000 POWER_COUNT。

我想显示与最近时间范围内的 POWER_COUNT 相比,在特定时间范围内 POWER_COUNT 增加 1 的项目。

目前我的查询看起来像这样:

SELECT ID, READ_TIME, POWER_COUNT
FROM ITEM_POWER WHERE READ_TIME BETWEEN '31-MAR-19' and '05-APR-19' 
AND POWER_COUNT > POWER_COUNT BETWEEN READ_TIME OF '24-MAR-19' AND '29-MAR-19'
GROUP BY ID, READ_TIME, POWER_COUNT
ORDER BY ID, READ_TIME, POWER_COUNT

显然我不相信我的行“AND POWER_COUNT > POWER_COUNT BETWEEN READ_TIME OF '24-MAR-19' AND '29-MAR-19' 会奏效,这正是我想要完成的。我想比较本周的 power_counts 与上周相比,如果 power_count 增加了,我想显示 READ_TIME,以及新的 POWER_COUNT.

示例数据:

ID READ_TIME POWER_COUNT
------------ --------- -----------
1234567 09-MAR-19         121
1234567 10-MAR-19         121
1234567 11-MAR-19         121
1234567 12-MAR-19         121
1234567 13-MAR-19         123
1234567 14-MAR-19         130

在上述数据中,ID 1234567 POWER_COUNT 在“13-MAR-19”从 121 增加到 123。对于此示例,假设我想将“13-MAR-19”和“14-MAR-19”之间的 POWER_COUNT 与“12-MAR-19”处的 POWER_COUNT 进行比较。由于 POWER_COUNT 从那时起增加了,我希望在我的报告中显示该 ID。如果 POWER_COUNT 没有从前一个日期的值增加,我想排除它。

根据您的示例数据,您只需要 lag():

SELECT ID, READ_TIME, POWER_COUNT
FROM (SELECT IP.*,
             LAG(POWER_COUNT) OVER (PARTITION BY ID ORDER BY READ_TIME) as PREV_POWER_COUNT
      FROM ITEM_POWER IP
     ) IP
WHERE READ_TIME >= DATE '2019-03-21' AND
      READ_TIME < '2019-04-06' AND
      POWER_COUNT <> PREV_POWER_COUNT 
ORDER BY ID, READ_TIME, POWER_COUNT;