Я следующий SQL запрос, который вычислительное сгруппированных данных по дням и дает следующий результат:Как обновить SQL-запрос для группировки данных по месяцам?
Теперь я хотел бы преобразовать этот SQL запрос для расчета данных, сгруппированных по месяцам, это означает, что в дате колонке должно быть:
2014-01
2014-02
2014-03
...
С суммы DIALS_CNT и других значений (смотрите пример ниже)
2014-01 | 120 | 56 | 26 | 40
Может ли кто-нибудь сказать мне, как я могу получить сумму столбцов по значениям и группе по месяцам?
Большое спасибо за помощь.
SQL запросов:
var DIALS_CNT = "DIALS_CNT";
var APPT_CNT = "APPT_CNT";
var CONVERS_CNT = "CONVERS_CNT";
var CANNOT_REACH_CNT = "CANNOT_REACH_CNT";
var DIALED_CALLS_TABLE = "dialed_calls";
var CALL_RESULT_STATE_APPT = "APPT";
var CALL_RESULT_STATE_CONV_NO_APPT = "CONV_NO_APPT";
var CALL_RESULT_STATE_CANNOT_REACH = "CANNOT_REACH";
var DATE_FROM = $scope.dateFrom;
var DATE_TO = $scope.dateTo;
var sqlQuery =
"SELECT d.date AS DATE, "+
"IFNULL(DIALS_CNT, 0) AS "+DIALS_CNT+", "+
"IFNULL(APPT_CNT, 0) AS "+APPT_CNT+", "+
"IFNULL(CONVERS_CNT, 0) AS "+CONVERS_CNT+", "+
"IFNULL(CANNOT_REACH_CNT, 0) AS "+CANNOT_REACH_CNT+" "+
"FROM "+
"(SELECT DATE('2014-01-01', '+' || (t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) || ' days') date FROM "+
"(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0, "+
"(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1, "+
"(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2, "+
"(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3, "+
"(SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4) d "+
"LEFT JOIN "+
"("+
"SELECT substr(m.date, 1, 10) as my_date, COUNT(m.ID) AS '"+DIALS_CNT+"', "+
"(SELECT COUNT(*) FROM "+DIALED_CALLS_TABLE+" subq WHERE subq.call_result = '"+CALL_RESULT_STATE_APPT+"' "+
"AND substr(m.date, 1, 10) = substr(subq.DATE, 1, 10)) AS '"+APPT_CNT+"', "+
" (SELECT COUNT(*) FROM "+DIALED_CALLS_TABLE+" subq WHERE subq.call_result = '"+CALL_RESULT_STATE_CONV_NO_APPT+"' "+
"AND substr(m.date, 1, 10) = substr(subq.DATE, 1, 10)) AS '"+CONVERS_CNT+"', "+
" (SELECT COUNT(*) FROM "+DIALED_CALLS_TABLE+" subq WHERE subq.call_result = '"+CALL_RESULT_STATE_CANNOT_REACH+"' "+
"AND substr(m.date, 1, 10) = substr(subq.DATE, 1, 10)) AS '"+CANNOT_REACH_CNT+"' "+
"FROM "+DIALED_CALLS_TABLE+" m "+
"GROUP BY my_date "+
") t "+
"ON d.date = t.my_date "+
"WHERE d.date BETWEEN '"+DATE_FROM+"' AND '"+DATE_TO+"' "+
"ORDER BY d.date DESC; ";
Спасибо, но в столбце d результата будет значение null вместо года и месяца, а также мне нужно вычислить значения для всех месяцев в диапазоне дат. –
Необходимо легко адаптировать ваш запрос, используя 'strftime'. –
Не могли бы вы добавить какой-нибудь рабочий пример, пожалуйста? У меня нет опыта с функцией strftime в SQLlite. –