2012-10-10 7 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 

내가 실행하면 (의 strftime (선택 테이블이 결과, 엔드 '% H %의 M'을 '- 구분 ') ||'- '||의 strftime ("%의 H - 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 

이 어떻게 안내 할 end_times FROM time_slot AS %의 M'끝))는 (도 같은 정확한 출력을 제공한다 이 두 테이블을 매핑하려면 CUSTOMER 테이블의 레코드를 성인용 및 성인용으로 요약해야한다고 가정합니다 (그림 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 

마지막으로, 우리 그룹은 슬롯 당 합계를 얻을 수 있습니다.

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 감사 : 나는 제로 NULL 값을 얻기 위해 대신 sumtotal을 사용하고 있습니다 30 분 간격이지만 원하는 결과를 얻을 수 없습니다. 30 분 간격으로 쿼리를 생성 할 수 있도록 도와 줄 수 있습니까? – Harry

+0

'end_times'와'strftime' 오프셋을 변경하면 작동합니다. 질문이있는 경우 질문 *을 질문 *으로하십시오. –