別の既存のテーブル A からの情報に基づいて、新しいテーブル B を作成したいと考えています。MySQL に、時間の範囲を考慮して列 A の値をグループ化し、列 B の値のみを合計する機能があるかどうか疑問に思っています。列 A のグループに基づいています。
テーブル A には、ユーザーのジャーナルのようなイベントのログが格納されます。1 人のユーザーから 1 日に複数のイベントが発生する可能性があります。仮説として、ユーザーが果物をいつ食べるかを追跡していて、1 週間 (7 日間) に何個の果物を食べ、何個のリンゴを食べているかを知りたいとします。
したがって、テーブル BI では、テーブル A の各エントリについて、過去 7 日間の果物とリンゴの総数を数えたいと考えています。
編集:
与えられた情報を単純化しすぎて申し訳ありませんが、私の例を完全に考えていませんでした。
最初はテーブル A しかありません。クエリからテーブル B を作成しようとしています。
推定:
- ユーザー/ID は、1 日に複数回エントリを記録できます。
- 合計カウントは、日付と日付の間の ID である必要があります - 7 日
- 果物の列は、7 日間の果物の合計数を表します (リンゴとバナナは両方とも果物です)。
- データは 2013 年 9 月 5 日から始まっただけではありません。2000 年までさかのぼることができ、2000 年から 2013 年までのすべての日付で 7 日間のスライディング ウィンドウを使用したいと考えています。
合計カウントは 7 日間のスライディング ウィンドウを超えています
次に例を示します。
Table A:
| id | date-time | apples | banana |
---------------------------------------------
| 1 | 2013-9-5 08:00:00 | 1 | 1 |
| 2 | 2013-9-5 09:00:00 | 1 | 0 |
| 1 | 2013-9-5 16:00:00 | 1 | 0 |
| 1 | 2013-9-6 08:00:00 | 0 | 1 |
| 2 | 2013-9-9 08:00:00 | 1 | 1 |
| 1 | 2013-9-11 08:00:00 | 0 | 1 |
| 1 | 2013-9-12 08:00:00 | 0 | 1 |
| 2 | 2013-9-13 08:00:00 | 1 | 1 |
注: ユーザー 1 は 2013 年 9 月 5 日に 2 つのエントリを記録しました
クエリの後の結果はテーブル B になります。
Table B
| id | date-time | apples | fruit |
--------------------------------------------
| 1 | 2013-9-5 08:00:00 | 1 | 2 |
| 2 | 2013-9-5 09:00:00 | 1 | 1 |
| 1 | 2013-9-5 16:00:00 | 2 | 3 |
| 1 | 2013-9-6 08:00:00 | 2 | 4 |
| 2 | 2013-9-9 08:00:00 | 2 | 3 |
| 1 | 2013-9-11 08:00:00 | 2 | 5 |
| 1 | 2013-9-12 08:00:00 | 0 | 3 |
| 2 | 2013-9-13 08:00:00 | 2 | 4 |
2013 年 9 月 12 日にスライディング ウィンドウが移動し、9-6 から 9-12 のみが含まれます。これが、id 1 が 2 個のリンゴの合計から 0 個のリンゴになる理由です。