首页 > 数据库 > mysql教程 > 如何在相同行为值的连续子集中查找最小和最大开始值和结束值?

如何在相同行为值的连续子集中查找最小和最大开始值和结束值?

Barbara Streisand
发布: 2024-12-22 12:36:14
原创
251 人浏览过

How to Find Minimum and Maximum startt and endd Values within Consecutive Subsets of Identical act Values?

连续行子集最小值和最大值

寻求一个查询,该查询识别并聚合相同行为值的连续子集中的起始值和结束值,这个问题深入研究了数据操作和聚合技术。

为了解决这个问题,我们可以利用以下方法步骤:

  1. 分配唯一行号:
    按名称对数据进行分区,并为每个名称组中的每个行为值分配连续的行号。这使我们能够区分连续的行。
  2. 计算行差异:
    计算每个动作的行号之间的差异(即 rn - act_n)。此差异表示连续子集中的 Act 值的位置。
  3. 按 Act 连续位置分组:
    使用行差异作为分组键聚合数据。这会将属于同一连续子集的行组合在一起。
  4. 查找最小值和最大值:
    在每个分组子集中,计算 startt 和 endd 的最小值和最大值。这提供了所需的输出。

以下查询实现了此方法:

with cte as (
  select 
    name
    ,act
    ,row_number() over (partition by name order by name,startt) rn
    ,row_number() over (partition by name, act order by name,startt) act_n
    ,startt
    ,endd
  from input
)
select
    name
    ,act
    ,min(startt) startt
    ,max(endd)   endd
    ,min(rn)     min_rn
    ,max(rn)     max_rn
from cte
group by 
    name
    ,act
    ,rn - act_n
order by 
    name
    ,min(rn)
登录后复制

以上是如何在相同行为值的连续子集中查找最小和最大开始值和结束值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板