SQLite 中的累计 SUM
Cumulative SUM in SQLite
我在 SQLite 中写了一个累积 VALUE 的查询,如果我只按 ID 排序(ID 是自动递增的 int),那很好。但是,如果我想按日期排序,然后按 ID 排序,查询会显示错误的结果。有什么想法吗?
查询:
select t1.ID,
t1.DATE,
t1.VALUE,
sum(t2.VALUE) as TOTAL
from test t1
inner join test t2 on t1.DATE >= t2.DATE and t1.id >= t2.id
group by t1.ID, t1.DATE
order by t1.DATE desc, t1.ID desc
结果:
ID DATE VALUE TOTAL
9 2015-01-16 55 281 -- should be 226 + 55 = 281
6 2015-01-15 10 26 -- should be 216 + 10 = 226
5 2015-01-15 5 16 -- should be 211 + 5 = 216
8 2015-01-14 100 211
7 2015-01-14 100 111
4 2015-01-13 5 11
3 2015-01-12 3 6
2 2015-01-11 2 3
1 2015-01-10 1 1
至少在小数据上,将连接更改为如下所示:
t1.DATE||substr('00000'||t1.id,-5) >= t2.DATE||substr('00000'||t2.id,-5)
工作正常...所以我们正在构建一个 "sort key" 基于日期和 ID(用零填充到 5 位数字)并在连接中使用它。尽管
可能有必要建立一个索引来处理性能
我在 SQLite 中写了一个累积 VALUE 的查询,如果我只按 ID 排序(ID 是自动递增的 int),那很好。但是,如果我想按日期排序,然后按 ID 排序,查询会显示错误的结果。有什么想法吗?
查询:
select t1.ID,
t1.DATE,
t1.VALUE,
sum(t2.VALUE) as TOTAL
from test t1
inner join test t2 on t1.DATE >= t2.DATE and t1.id >= t2.id
group by t1.ID, t1.DATE
order by t1.DATE desc, t1.ID desc
结果:
ID DATE VALUE TOTAL
9 2015-01-16 55 281 -- should be 226 + 55 = 281
6 2015-01-15 10 26 -- should be 216 + 10 = 226
5 2015-01-15 5 16 -- should be 211 + 5 = 216
8 2015-01-14 100 211
7 2015-01-14 100 111
4 2015-01-13 5 11
3 2015-01-12 3 6
2 2015-01-11 2 3
1 2015-01-10 1 1
至少在小数据上,将连接更改为如下所示:
t1.DATE||substr('00000'||t1.id,-5) >= t2.DATE||substr('00000'||t2.id,-5)
工作正常...所以我们正在构建一个 "sort key" 基于日期和 ID(用零填充到 5 位数字)并在连接中使用它。尽管
可能有必要建立一个索引来处理性能