当值在连续时间内不改变时合并行

Posted

技术标签:

【中文标题】当值在连续时间内不改变时合并行【英文标题】:Merge rows when value doesn't change in continuous time 【发布时间】:2020-02-25 21:00:16 【问题描述】:

我需要总结一个包含以下信息的表:序列号,开始日期,结束日期,状态ID和时间状态,我需要的是合并在连续时间内保持相同状态ID的行(行的结束日期与开始日期相同另一个),例如,对于这种情况:

我需要输出这个:

由于我认为我不能使用Group By,所以我无法提供解决方案,因此当 StatusId 连续时间不发生变化时,我需要合并具有特定 SerialNumber 的行。

【问题讨论】:

相比图像,我们更喜欢数据格式的文本。 【参考方案1】:

这是一个典型的间隙和孤岛问题,您希望将具有相同序列号和状态的相邻行组合在一起。

这是一种标准方法,它使用row_numbers 之间的差异来识别组:

select
    serialNumber,
    min(beginDateTime) beginDateTime,
    max(endDateTime) endDateTime,
    statusId,
    sum(timeInStateInMilliseconds) timeInStateInMilliseconds
from (
    select 
        t.*,
        row_number() over(partition by serialNumber order by beginDateTime) rn1,
        row_number() over(partition by serialNumber , statusId order by beginDateTime) rn2
    from mytable t
) t
group by serialNumber, statusId, rn1 - rn2

【讨论】:

谢谢@DaleK,我确实投了赞成票,但由于我是新用户(声誉低于 15),因此似乎没有向公众展示 没关系 - 坚持下去,很快你就会拥有代表。

以上是关于当值在连续时间内不改变时合并行的主要内容,如果未能解决你的问题,请参考以下文章

当一个的结束时间是另一个的开始时间时合并行(Oracle)

电源查询。合并具有折叠值的行中的重复行

awk 如何将一个文本的奇数行和偶数行合并 与 第2行和第3行合并

如何合并行中重复的单元格值?我的代码忽略了一些重复的值

使用合并时删除某些行

在 R 中使用合并函数时重复行 - 但我不想要总和