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 |
+----+---------+------+-------+

イベントはバッチで到着し、次のように各トランザクション ID の値を合計してトランザクションを作成したいと思います。

select transid, sum(value) from eventtable group by transid;

ただし、そのトランザクション ID のすべてのイベントが到着した後でのみです。これは、コード 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)egin があるとき、(i)?? それが何であるかわからず、(e)nd このグループは除外されません。

于 2012-12-04T11:02:38.473 に答える