聚合具有特定值的两行之间的行
Posted
技术标签:
【中文标题】聚合具有特定值的两行之间的行【英文标题】:Aggregate rows between two rows with certain value 【发布时间】:2018-05-09 21:02:05 【问题描述】:我正在尝试制定一个查询来聚合具有特定值的行之间的行:在此示例中,我想折叠并汇总 ID 不是 1 但仍显示 ID 行的所有行的时间1.
这是我的桌子:
ID | Time
----+-----------
1 | 60
2 | 10
3 | 15
1 | 30
4 | 100
1 | 20
这是我正在寻找的结果:
ID | Time
--------+-----------
1 | 60
Other | 25
1 | 30
Other | 100
1 | 20
我试图求和并添加一个条件与 CASE,或者但到目前为止,我的解决方案只能让我对所有行求和并且我丢失了间隔,所以我得到了这个:
ID | Time
------------+-----------
Other | 125
1 | 110
任何正确方向的帮助或建议将不胜感激,谢谢!
【问题讨论】:
我认为您还需要有一列来提供您假设表中存在的顺序。 IE。我们需要一个列,其中1 60
是第一条记录,2 10
是第二条记录,依此类推。
【参考方案1】:
您需要定义分组。 SQLite 不适合这种操作,但您可以通过将“1”值与每个值相加来实现。
在 SQLite 中,我们可以使用rowid
列进行排序:
select (case when id = 1 then '1' else 'other' end) as which,
sum(time)
from (select t.*,
(select count(*) from t t2 where t2.rowid <= t.rowid and t2.id = 1) as grp
from t
) t
group by (case when id = 1 then '1' else 'other' end), grp
order by grp, which;
【讨论】:
以上是关于聚合具有特定值的两行之间的行的主要内容,如果未能解决你的问题,请参考以下文章