具有多个查询选项的累计值

时间:2018-05-29 08:34:49

标签: sqlite

我在sqlite3中有一个包含数千行的表,并希望为特定查询创建几天的累积总和。我尝试了一些我在这里找到的东西,但没有任何东西给了我正在寻找的东西。

所以这是我的表的一部分作为示例值:

id|killmailid|killmaildate|killmailtime|attallianceid|attcharid|attship    
69124|69295810|2018-04-12|00:57|99007379|1129992577|11393
69125|69295810|2018-04-12|00:57|99007379|90279655|29990
69126|69298874|2018-04-12|02:07|99007379|2008187055|671
69127|69300565|2018-04-12|07:32|99007379|96282716|28665
69128|69300565|2018-04-12|07:32|99007379|96734967|11198
69129|69300911|2018-04-12|10:21|99007379|90154776|608
69130|69302387|2018-04-12|11:29|99007379|91488317|23913

我们正在使用此数据库中的数据执行多项操作,但现在我们希望使用attship获取attcharid的累积值。

我做的第一件事就是让DISTINCT attcharid WHERE attship = X,所以我的查询看起来像这样:

SELECT killmaildate, count(DISTINCT attcharid)
FROM killdata
WHERE killmaildate BETWEEN date('2018-04-12') AND date('2018-04-30') 
AND attship = '23913' 
AND attallianceid = '99007379'
GROUP BY killmaildate;

这给了我一个很好的清单,列出了在每个killmaildate上使用attship的附件。

2018-04-12|27
2018-04-14|13
2018-04-15|29
2018-04-16|10
2018-04-17|7
2018-04-18|34
2018-04-19|8
2018-04-20|39

现在这部分给了我一些麻烦。我想将这些附件加在一起,但它应该是DISTINCT,这意味着只应添加新的附件。

所以,让我们说2018-04-12已经有27个attchahip,2018-04-13有13个attchahip的attship,但其中10个已经计入第一天,累计值2018-04-13应该是30而不是40。

我从这里尝试了一些事情,这些事情并没有真正解决,我的最后一次尝试是这样的:

SELECT killmaildate, sum(attcharid)
FROM ( SELECT killmaildate, count(DISTINCT attcharid) FROM killdata);

但是当然这并没有让我想到的地方。 最后,我想在attallhipid中制作一个关于attship的图表,以了解attship用户的增长情况。

1 个答案:

答案 0 :(得分:0)

忽略某些早期组中出现的所有行:

SELECT ...
WHERE ...
  AND attcharid NOT IN (SELECT attcharid
                        FROM killdata AS k2
                        WHERE k2.killmaildate BETWEEN '2018-04-12' AND '2018-04-30'
                          AND k2.attship = '23913'
                          AND k2.attallianceid = '99007379'
                          AND k2.killmaildate < killdata.killmaildate)
GROUP BY ...