在我的数据库中有一个表ITEM_POWER,它包括ID #、READ_TIME和POWER_COUNT。
每次关机时,它都会增加表中的POWER_COUNT +1。一个项目可以有0 POWER_COUNT,如果它从来没有关闭,或者它可以有1000 POWER_COUNT,如果它关闭了1000次。
我想显示的项目,其POWER_COUNT增加了一个特定的时间范围,与POWER_COUNT相比,从最近的时间框架。
目前,我的查询如下所示:
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显然,我不相信我的台词“和POWER_COUNT > POWER_COUNT之间的‘24-3月-19’和‘29-3月-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从121个增加到123个。在这个例子中,假设我想将‘13-3月-19’和‘14-3月-19’之间的POWER_COUNT和‘12-3月-19’的POWER_COUNT进行比较。因为POWER_COUNT从那时起就增加了,我希望在我的报告中显示这个ID。如果POWER_COUNT没有从前一个日期的值增加,我想排除它。
发布于 2019-04-04 18:15:20
根据您的示例数据,您只需要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;https://stackoverflow.com/questions/55522263
复制相似问题