mysql:根据开始和结束时间戳获取运行计数

uttx8gqw  于 2023-05-16  发布在  Mysql
关注(0)|答案(1)|浏览(178)

我有一个workflows表,其中列为(processIDstarted_atended_at
如何根据下表中的数据,按照给定的时间戳将正在运行的counts进程ID构建为时间序列:
进程时间戳表:

id      started_at              ended_at
------- --------------------    --------------------
1203914 2023-04-20T04:54:29Z    2023-04-20T20:43:53Z
1197674 2023-04-20T06:00:28Z    2023-04-20T21:17:53Z
1212050 2023-04-20T18:47:29Z    0001-01-01T00:00:00Z
1198434 2023-04-22T18:16:53Z    2023-04-22T19:02:59Z
1210450 2023-04-22T19:06:53Z    2023-04-26T03:23:39Z
1210466 2023-04-23T05:34:53Z    2023-04-25T07:09:39Z
1201986 2023-04-24T06:30:53Z    2023-04-24T23:49:53Z
1200122 2023-04-24T17:22:53Z    2023-04-25T05:29:39Z
1209114 2023-04-25T01:07:53Z    2023-04-26T23:03:39Z
1198570 2023-04-25T01:10:53Z    2023-04-27T00:59:38Z

预期运行进程列表:

timestamp               running_process_count
--------------------    ---------------------
2023-04-20T04:54:29Z    1
2023-04-20T06:00:28Z    2
2023-04-20T18:47:29Z    3
2023-04-22T18:16:53Z    1
2023-04-22T19:06:53Z    1
2023-04-23T05:34:53Z    2
2023-04-24T06:30:53Z    3
2023-04-24T17:22:53Z    4
2023-04-25T01:07:53Z    4

我正在寻找类似于它是如何完成的:
R- Calculate a count of items over time using start and end dates
我可以通过使用以下查询来获得特定HOUR的进程ID计数,但是我正在寻找的是每个时间戳的“运行”进程计数(可以是started_at),其中我们显示started_at < timestamp < ended_at的进程计数。
我需要使用MySQL窗口函数来实现这一点吗?(滞后,超前,分区等)-抱歉,因为我不熟悉高级MySQL操作符。
我目前掌握的情况:

SELECT   
  started_at,
  count(*) AS running_count
FROM workflows
GROUP BY 
  YEAR(started_at),
  MONTH(started_at),
  DAY(started_at),
  HOUR(started_at)
ORDER BY 
  YEAR(started_at),
  MONTH(started_at),
  DAY(started_at),
  HOUR(started_at);
s3fp2yjn

s3fp2yjn1#

执行自联接和聚合,如下所示:

select t1.started_at,
  count(t2.id) cnt
from workflows t1 left join workflows t2
on t1.started_at between t2.started_at and t2.ended_at
group by t1.started_at
order by t1.started_at

See a demo

相关问题