我有一个表,其中存储了所有执行的作业。知道我想知道是否所有的工作得到正确执行(每分钟)。每个条目都有一个 created_at
时间戳。
我现在的问题是如何选择在最后一个条目1分钟后没有执行的所有条目。我觉得这是一个非常复杂的问题。到目前为止,我已经把所有的条目都整理好了 created_at
.
SELECT *
FROM jobs
WHERE created_at IS NOT NULL
ORDER By created_at
``` `created_at` 是时间戳。像这样的 `2020-02-02 10:00:00` .
表结构:
id job_name created_at
1 ABC 2020-02-02 10:00:00
2 ABC 2020-02-02 10:01:00
3 ABC 2020-02-02 10:02:00
4 ABC 2020-02-02 10:04:00
5 ABC 2020-02-02 10:07:00
我想要的结果是:现在我想要得到所有没有执行作业的日期。所以,至少 `10:03:00` , `10:05:00` 以及 `10:06:00` 工作没有完成!
你们知道吗?我猜这是一个递归查询。这个查询需要在postgres中编写。
2条答案
按热度按时间bvjveswy1#
我使用了一个包含lead分析函数的cte来获取下一次运行的时间戳。然后,我过滤运行间隔超过1分钟的行,并为这些行生成运行时间戳和下一个运行时间戳之间的1分钟间隔。
你可以在这里玩:http://sqlfiddle.com/#!2011年2月17日
toe950272#
我猜您希望每个日历分钟运行一次作业。这样,你就不会有59秒对61秒的延迟。
你不需要
lead()
为了这个。只需生成时间序列并连接或使用not exists
: