1

(CUSTOMER) の形式のテーブルがあります (図 1.1)

M_CODE  H_CODE END_TIME_OF_SERVICE ADULT ADULT_F
TKLK    LONE     09:19:16           1     2
TKLK    LONE     09:22:11           4     6
TKLK    LONE     09:32:46           2     7
TKLK    LONE     09:32:46           4     9
TKLK    LONE     10:09:36           1     3

そして、( SELECT strftime('%H:%M', end, '-9 minutes') || ' - ' || strftime('%H:%M', end ) AS time_slot FROM end_times ) を実行すると、 (図 - 1.2) のように正しい出力が得られます。

09:19 - 09:28
09:29 - 09:38
09:39 - 09:48
09:49 - 09:58
09:59 - 10:08
10:09 - 10:18 

これらの 2 つのテーブルをマッピングする方法を教えていただけますか。CUSTOMER テーブルのレコードを、adult 列と adult_f 列について (図 1.2 から図 1.1 に) 合計する必要があるとします。

   ADULT    ADULT_F    TIME_SLOT
      5        8      09:19 - 09:28
      6       16      09:29 - 09:38
      0        0      09:39 - 09:48
      0        0      09:49 - 09:58
      0        0      09:59 - 10:08
      1        3      10:09 - 10:18 

解決策を教えてください。お時間をいただきありがとうございます。

4

1 に答える 1

1

まず、開始時刻と終了時刻を簡単に比較できる形式で取得する必要があります(後で組み合わせることができます)。

SELECT strftime('%H:%M', end, '-9 minutes') AS slot_start,
       strftime('%H:%M', end              ) AS slot_end
FROM end_times

CUSTOMER次に、秒を無視して、これをテーブルに結合できます。

SELECT ADULT,
       ADULT_F,
       slot_start,
       slot_end
FROM (SELECT strftime('%H:%M', end, '-9 minutes') AS slot_start,
             strftime('%H:%M', end              ) AS slot_end
      FROM end_times)
     LEFT JOIN CUSTOMER
     ON substr(END_TIME_OF_SERVICE, 1, 5) BETWEEN slot_start AND slot_end

最後に、スロットごとにグループ化して、スロットごとの合計を取得します。値のゼロを取得するtotal代わりに使用しています:sumNULL

SELECT total(ADULT),
       total(ADULT_F),
       slot_start || ' - ' || slot_end
FROM (SELECT strftime('%H:%M', end, '-9 minutes') AS slot_start,
             strftime('%H:%M', end              ) AS slot_end
      FROM end_times)
     LEFT JOIN CUSTOMER
     ON substr(END_TIME_OF_SERVICE, 1, 5) BETWEEN slot_start AND slot_end
GROUP BY slot_start
于 2012-10-10T09:14:28.153 に答える