【问题标题】:SQLite How to Group results by hours?SQLite 如何按小时对结果进行分组?
【发布时间】:2015-03-04 12:07:37
【问题描述】:

我有以下 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
--------------------------------------------------

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

表格结构如下:

我想简单地使用组和拥有不会很好 解决方案。?

非常感谢您的建议。

【问题讨论】:

  • 请提供所有的列和表数据
  • 我刚刚更新了问题。

标签: android sql sqlite group-by


【解决方案1】:

您可以使用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');

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

【讨论】:

  • 谢谢,但它只返回一行 hr。日期列的格式可能有问题,意思是:2015-01-28 19:27:05CET?
  • 这不是supported date formats 之一。
【解决方案2】:

在做了一些研究后,我发现问题出在日期时间值的格式上(时区的 CET 值与 sqlite 不兼容)。因此,如果我从日期时间字符串中删除 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);

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多