【问题标题】:How to group by continuous rows in sqlite?如何在sqlite中按连续行分组?
【发布时间】:2018-02-23 20:10:10
【问题描述】:

我有一张这样的桌子:

id version count
1  0       3
2  0       4
3  0       3
4  1       3
5  1       2
6  1       1
7  0       3
8  0       5

我想得到如下结果:

min_id version sum
1      0       10
4      1       6
7      0       8

如果我使用SELECT MIN(id), version, sum(count) group by version,我会得到:

min_id version sum
1      0       18
4      1       6

因为GROUP BY 将所有内容组合在同一个版本中。我只想根据 id 组合那些连续的版本。

【问题讨论】:

  • 那么,ID的数值有意义吗? (表示顺序?)
  • 为什么旧版本号会在以后重新使用?为什么版本不总是增值,永远不会减少?

标签: sql sqlite group-by


【解决方案1】:

这在 SQLite 中很难做到,但可能。现在,性能很糟糕,但想法是您计算具有 不同 id 的任何给定行之前的行数。这标识了每个组!瞧!

select version, min(id), max(id), sum(count)
from (select t.*,
             (select count(*) from t t2 where t2.version <> t.version and t2.id < t.id) as grp
      from t
     ) t
group by version, grp;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 2020-09-15
    • 2018-07-10
    • 2018-09-30
    • 2021-12-06
    • 1970-01-01
    • 2018-04-09
    • 2018-11-27
    相关资源
    最近更新 更多