首页 >数据库 >mysql教程 >如何查找活动组内连续行的最小和最大开始时间和结束时间?

如何查找活动组内连续行的最小和最大开始时间和结束时间?

Susan Sarandon
Susan Sarandon原创
2025-01-03 01:03:39685浏览

How to Find Minimum and Maximum Start and End Times for Consecutive Rows within Activity Groups?

查找连续行的最小值和最大值

您有一个数据集,其中的行代表活动,按名称分组并按行号排序。目标是找到每个活动组中连续行的开始时间和结束时间的最小值和最大值。

使用行号差异的解决方案:

一种方法是使用行号之间的差异来识别相同的连续行活动:

with cte as (
  select *,
    row_number() over (partition by name order by rn) as seqnum_n,
    row_number() over (partition by name, act order by rn) as seqnum_na
  from input
)
select name, act, min(startt), max(endd)
from cte
group by seqnum_n - seqnum_na, name, act;

说明:

  1. 通过添加两个附加列创建一个名为 cte 的公用表表达式 (CTE):

    • seqnum_n:每个名称中的行号组。
    • seqnum_na:每个名称活动组内的行号。
  2. 计算 seqnum_n 和 seqnum_na 之间的差异。每个活动中的连续行具有相同的差值。
  3. 按差值、名称和活动进行分组以聚合最小值和最大值。

以上是如何查找活动组内连续行的最小和最大开始时间和结束时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn