我确实有一个customer
,他在特定时间段内使用了不同的设备,并以valid_from
和valid_to
日期进行了跟踪。但是,每次对此设备进行更改时,都会写入新的行,并且除了新的有效的from / to之外,基于行的数据也没有任何可见的更改。
我要做的是将前两行aggregate
{1}合并为一,3
和4
相同,而5
和{{1 }} 像他们那样。到目前为止,我提出的所有解决方案都适用于用户的使用历史记录,而不是切换回6
。一切都在失败。
我非常感谢您的帮助,谢谢!
答案 0 :(得分:1)
如果您知道先前的valid_to
与当前的valid_from
相同,则可以使用lag()
来确定新分组的开始位置。然后使用累积总和来计算分组并最终进行聚合:
select cust, act_dev, min(valid_from), max(valid_to)
from (select t.*,
sum(case when prev_valid_to = valid_from then 0 else 1 end) over (partition by cust order by valid_from) as grouping
from (select t.*,
lag(valid_to) over (partition by cust, act_dev order by valid_from) as prev_valid_to
from t
) t
) t
group by cust, act_dev, grouping;
Here是db <>小提琴。