gpt4 book ai didi

sql - 在sql中用多个集合对记录进行分组

转载 作者:行者123 更新时间:2023-11-29 14:09:49 24 4
gpt4 key购买 nike

我必须优化选择查询以减少 no。当我们有相同数据但日期不同时的记录。我需要按日期对所有行进行排序,并且应该将所有行合并为一个行,直到找到不同的列值。通常,数据如下所示。

date       c_val
1/1/2016 200
2/1/2016 200
3/1/2016 300
4/1/2016 300
5/1/2016 300
6/1/2016 200
7/1/2016 200

那么我的输出应该如下。

start_date  end_date    c_val
1/1/2016 2/1/2016 200
3/1/2016 5/1/2016 300
6/1/2016 7/1/2016 200

我现在的查询是这样的:

select min(date) as start_date, max(date) as end_date, c_val
from t_ord
group by c_val;

但这实际上只返回两条记录,因为它是用 c_val 分组的。我想我需要额外订购并在发现新值(value)时打破。postgres 中有什么可用的功能吗?

最佳答案

您可以使用不同的行号方法将具有相同 c_val 的连续行(按日期排序)归为一组,并在遇到新值时重新开始一个新组。完成后,根据 c_val 获取每个组的 minmax 日期。

select min(date) as startdate,max(date) as enddate,c_val
from (select c_val,date,row_number() over(order by date)
-row_number() over(partition by c_val order by date) as grp
from t_ord
) t
group by c_val,grp;

关于sql - 在sql中用多个集合对记录进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com