2

我有事件流入 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 的新手,如何在求和之前实现结束代码存在的要求?

4

2 回答 2

1

也许与having

select transid, sum(value)
from eventtable 
group by transid 
having max(case code when 'e' then 1 end)=1;
于 2012-12-04T11:03:14.930 回答
0
select transid, sum(value) from eventtable 
group by transid 
HAVING COUNT(*) = 3

您应该计算组中的记录。那么当有(b)开始时,(i)?不知道它是什么,并且 (e)nd 这个组没有被过滤掉。

于 2012-12-04T11:02:38.473 回答