0

こんにちは、

レコードを特定のチャンクにグループ化する効率的な方法を見つけようとしています。レコードはカウントと時間で構成されています。以下の例を参照してください。カウントは毎分行われます。

+----------+---------------+---------------+
| count_id | count_reading | count_time    |
+----------+---------------+---------------+
| 5847348  | 168           | 1358174236000 |
+----------+---------------+---------------+
| 5847347  | 342           | 1358174176000 |
+----------+---------------+---------------+
| 5847346  | 228           | 1358174116000 |
+----------+---------------+---------------+
| 5847345  | 240           | 1358174056000 |
+----------+---------------+---------------+
| 5847344  | 12            | 1358173996000 |
+----------+---------------+---------------+
| 5847343  | 0             | 1358173936000 |
+----------+---------------+---------------+
| 5847342  | 48            | 1358173876000 |
+----------+---------------+---------------+
| 5847341  | 480           | 1358173816000 |
+----------+---------------+---------------+
| 5847340  | 473           | 1358173756000 |
+----------+---------------+---------------+
| 5847339  | 380           | 1358173696000 |
+----------+---------------+---------------+

私が達成したいのは、個々のシフトのカウントの合計です。私には2つのシナリオがあります...

  • 07:00 ~ 19:00 および 19:00 ~ 07:00 の 12 時間シフトの合計。
  • 0700-1400、1400-2200、および 2200-0700 を実行するシフトの合計。

結果は次のようになります。

+---------------+--------------------------------------------+
| count_reading | count_time                                 |
+---------------+--------------------------------------------+
| 10000         | Between 0700 and now starting on the 13th  |
+---------------+--------------------------------------------+
| 20000         | Between 1900 and 0700 starting on the 12th |
+---------------+--------------------------------------------+
| 50000         | Between 0700 and 1900 starting on the 12th |
+---------------+--------------------------------------------+
| 10000         | Between 1900 and 0700 starting on the 11th |
+---------------+--------------------------------------------+

シナリオに応じて上記の問題に取り組む 2 つのクエリに取り組んでいました。私はこれについて少し運が良かったので助けを求めました。もし誰かが私を助けることができれば、それは大歓迎です。

4

1 に答える 1

1

group by任意の句と派生値をとることができます。例:(疑似っぽいコードで):

SELECT SUM(count_reading), TIME(count_time) BETWEEN 7 and 19 AS shift
GROUP BY shift

shift = 1最終的には、7〜19とshift = 019〜7の2つのグループになります。

同様に、3方向シフトの場合、もう少しロジックがあります。

SELECT sum(count_reading),
    CASE WHEN TIME(count_time) BETWEEN 7 AND 14 THEN 1 ELSE
         WHEN TIME(count_time) BETWEEN 14 and 22 THEN 2
         ELSE 3 END AS shift
GROUP BY shift

実際のlogic/sql構文は非常に単純である必要があります。

于 2013-01-14T15:30:15.367 に答える