仅显示从某个时间范围开始增加的记录
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;
在我的数据库中有一个 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;