2012-10-10 71 views
1

我有表的格式(客戶)(圖1.1)SQLITE查詢願望導致

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',結束,「 - 9分鐘 ')||' - '||的strftime(' %H:%M」,結束)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 

你能指導如何這兩個表映射,突然想到說,在客戶表中的記錄應總結了成年和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 

請指引我一個解決方案,感謝您的時間。

回答

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,而不是sum得到一個零NULL值:

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

優秀CL,再次感謝你這麼多 – Harry

+0

嗨CL,希望我沒有打擾你,我盡我所能找出具有相同間隔30分鐘,但無法獲得理想的結果。你能提供你的幫助來生成30分鐘的時間間隔請查詢.. – Harry

+0

改變'end_times'和'strftime'偏移應該工作。如果您有問題,請將問題*作爲問題*。 –