我有事件流入MySQL数据库,我需要将事件分组并汇总到事务并存储到另一个表中。数据如下:
+----+---------+------+-------+
| id | transid | code | value |
+----+---------+------+-------+
| 1 | 1 | b | 12 |
| 2 | 1 | i | 23 |
| 3 | 2 | b | 34 |
| 4 | 1 | e | 45 |
| 5 | 3 | b | 56 |
| 6 | 2 | i | 67 |
| 7 | 2 | e | 78 |
| 8 | 3 | i | 89 |
| 9 | 3 | i | 90 |
+----+---------+------+-------+
事件分批到达,我想通过总结每个transid的值来创建交易,例如:
select transid, sum(value) from eventtable group by transid;
但仅在该transid的所有事件到来之后。这是由具有代码e的事件决定的(b代表开头,e代表结束,i代表不同数量的中间体)。作为SQL的新手,如何在求和之前实现对结束代码存在的要求?
答案 0 :(得分:1)
也许是having
:
select transid, sum(value)
from eventtable
group by transid
having max(case code when 'e' then 1 end)=1;
答案 1 :(得分:0)
select transid, sum(value) from eventtable
group by transid
HAVING COUNT(*) = 3
你应该统计小组中的记录。所以当有(b)egin时,(i)??不知道它是什么,(e)这个小组没有被过滤掉。