当值在连续时间内不改变时合并行
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_number
s 之间的差异来识别组:
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),因此似乎没有向公众展示 没关系 - 坚持下去,很快你就会拥有代表。以上是关于当值在连续时间内不改变时合并行的主要内容,如果未能解决你的问题,请参考以下文章