2014-10-07 117 views
-1

期間條件分組的數據我有以下結構的表:獲取日期

enter image description here

我想創建查詢這使我產生以下格式兩個日期範圍:

FROM  | TO  | DIALS_CNT | APPT_CNT | CONVERS_CNT | CANNOT_REACH_CNT | 
    2014-09-30 | 2014-10-06| 100   | 50  | 20   | 30   | 
FROM = Date from given to between range 
    TO = Date to given to between range 
    APPT_CNT = WHERE call.result = APPT 
    CONVERS_CNT = WHERE call.result = CONV_NO_APPT 
    CANNOT_REACH_CNT = WHERE call.result = CANNOT_REACH 

我試圖用內選擇具有計數和WHERE條件,但沒有運氣:

SELECT 
    dc.date, 
    (SELECT COUNT('APPT') FROM dialed_calls 
    WHERE dc.call_result = 'APPT') as APPT_CNT 
FROM dialed_calls AS dc 
GROUP BY dc.date 
WHERE dc.date BETWEEN '2014-09-30' AND '2014-10-06'; 
+0

你已經試過了什麼查詢?錯誤的輸出是什麼? – 2014-10-07 12:30:14

+0

你期望只有一行輸出? – 1010 2014-10-07 14:05:16

+0

顯示的表中沒有'call_result'列。 – 2014-10-07 14:26:53

回答

1

你的問題實在是不清楚。根據你的代碼,我想你有一個call_result列和一個日期列的呼叫細節表。

如果你想計算不同類型throught call_result,你可以用總和,而不是指望這樣的電話:

SELECT '2014-09-30' as from, 
     '2014-10-06' as to, 
     COUNT(*) AS DIALS_CNT, 
     SUM(CASE WHEN dc.call_result = 'APPT' THEN 1 ELSE 0 END) AS APPT_CNT, 
     SUM(CASE WHEN dc.call_result = 'CONV_NO_APPT' THEN 1 ELSE 0 END) AS CONVERS_CNT , 
     SUM(CASE WHEN dc.call_result = 'CANNOT_REACH' THEN 1 ELSE 0 END) AS CANNOT_REACH_CNT 
    FROM dialed_calls dc 
WHERE dc.date BETWEEN '2014-09-30' AND '2014-10-06' 
0

你所尋找的是一個BETWEEN聲明抓取適當的日期範圍和COUNT聚集列出你的計數。 Here是SQLite的有用運算符的列表,here是關於聚合的一些細節。

只需要小心地按照question所示正確列出日期範圍,SQLite就會挑剔它的日期格式。

----------------------------------編輯---------- -------------------------

嘗試此查詢:

SELECT dc.date, COUNT('APPT') 
FROM dialed_calls AS dc 
WHERE dc.date BETWEEN '2014-09-30' AND '2014-10-06' 
GROUP BY dc.date; 
+0

你好,是的,我使用了BETWEEN,但它返回了很多行。在示例結果中,我只需要返回具有給定日期範圍的計算數據的一行。 – 2014-10-07 12:44:19

+0

你需要使用COUNT和GROUP BY來聚合一些東西。我會建議在w3schools上通過一些教程來學習ANSI SQL語法。這是GROUP BY的一個很好的起點:http://www.w3schools.com/sql/sql_groupby.asp – DanK 2014-10-07 12:47:33

+0

@GeorgeSmith我把你的問題放在上面並修正了語法問題......試試上面列出的問題。要添加更多的計數列,您可以爲每個需要的字段添加一個額外的COUNT(字段名)。 – DanK 2014-10-07 14:26:39

0

這就好比your earlier question,但有兩列和BETWEEN:

SELECT zFrom AS "FROM", 
     zTo AS "TO", 
     (SELECT COUNT(*) 
     FROM MyTable 
     WHERE date BETWEEN zFrom AND zTo 
     ) AS Dials_Cnt, 
     (SELECT SUM(Call_Result = 'APPT') 
     FROM MyTable 
     WHERE date BETWEEN zFrom AND zTo 
     ) AS Appt_Cnt, 
     ... 
FROM (SELECT '2014-09-30' AS zFrom, '2014-10-06 9' AS zTo UNION ALL 
     SELECT '2014-10-07',   '2014-10-13 9'  UNION ALL 
     ...) 

在結束日期的附加9可確保時間與該日期相匹配。