SQLite如何按小时分组结果?

时间:2015-03-04 12:07:37

标签: android sql sqlite group-by

我有以下SQL命令,它返回一些值的计数。

    SELECT 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 ;

我想将结果按小时分组,以获得此结果

--------------------------------------------------
HOUR | APPT_CNT | CONV_NO_APPT | CANNOT_REACH_CNT
--------------------------------------------------
8:00 | 10       | 20           | 30
--------------------------------------------------
9:00 | 20       | 10           | 10
--------------------------------------------------

等等。获取值大于零的小时值。

表的结构如下: enter image description here

我想这个组的简单用法并不会很好 溶液。?

非常感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

您可以使用strftime()提取小时并使用group by

SELECT strftime(datetimecolumn, '%H') as hr,
       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
GROUP BY strftime(datetimecolumn, '%H');

建议:不要对列别名使用单引号。仅对字符串和日期常量使用单引号。

答案 1 :(得分:0)

在做了一些研究之后,我发现问题是日期时间值的格式(时区的CET值与sqlite不兼容)。因此,如果我从datetime字符串中删除了CET值,我得到了正确的结果。

SELECT strftime('%H', dc.date) as hr,
       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
GROUP BY strftime('%H', dc.date);