我有一些数据:
期间| id_帐户 |浮点值
24217 | 24217 303003 | 303003 0
24218 | 24218 303003 | 303003 0
24219 | 24219 303003 | 303003 1
24220 | 24220 303003 | 303003 1
24221 | 24221 303003 | 303003 0
24222 | 24222 303003 | 303003 0
我需要像这样对这些数据进行分组:
begin_period | end_period| id_account | float_value
24217 | 24218 | 303003 | 0
24219 | 24220 | 303003 | 1
24221 | 24222 | 303003 | 0
我通过分区和 while 循环尝试了 row_number,但没有成功。
最佳答案
我将其理解为间隙和 isald 问题,您希望将具有相同 id_account< 的记录中的“相邻”行(即具有相同
和float_value
的行)分组在一起参数
。
这里,我认为最简单的方法是利用行号之间的差异来计算每条记录属于哪个组:
select
min(period) begin_period,
max(period) end_period,
id_account,
parameter,
float_value
from (
select
t.*,
row_number() over(partition by id_account, parameter order by period) rn1,
row_number() over(partition by id_account, parameter, float_value order by period) rn2
from mytable t
) t
group by id_account, parameter, float_value, rn1 -rn2
order by id_account, parameter, begin_period
<强> Demo on DB Fiddle :
begin_period | end_period | id_account | parameter | float_value -----------: | ---------: | ---------: | :------------- | ----------: 24217 | 24218 | 303003 | ACCOUNT_STATUS | 0 24219 | 24220 | 303003 | ACCOUNT_STATUS | 1 24221 | 24222 | 303003 | ACCOUNT_STATUS | 0
关于sql - T-SQL 按条件对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62691560/