我需要按复杂的条件对表中的行进行分组。假设我有一张桌子:
usize
其中包含以下内容:
create table items (
name text,
price float
)
前两个foo | 42.0
foo | 42.5
foo | 100
bar | 42
的价格相差不到10%(条件类似于foo
),因此它们应归为一个组,而其他(第3个){ {1}}和a.price / b.price between 0.9 and 1.1
应该在不同的组中,并且预期结果应该是这样的:
foo
可以使用sql查询吗?
答案 0 :(得分:0)
基于您的评论中的假设,您可以寻找滞后时间以根据相对价格定义组的起始位置。然后,对“分组开始”进行累加,以计算分组ID,然后进行汇总:
select item, min(price), max(price), count(*)
from (select i.*,
count(*) over (filter where prev_price < 0.9 * price) over (partition by item order by price) as grp
from (select i.*,
lag(price) over (partition by item order by price) as prev_price
from items i
) i
) i
group by item
order by item, min(price);