0
我有以下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而不是年和月,也需要計算日期範圍內所有月份的值。 – 2014-10-01 15:08:21
應該很容易使用'strftime'來調整你的查詢。 – 2014-10-01 15:44:28
請問您可以添加一些實例嗎?我還沒有在SQLlite中使用strftime函數的經驗。 – 2014-10-01 16:14:05