2012-11-23 73 views
0

我正在尋找通過模塊名稱(如其當前所示)來訂購以下MySQL語句,但只包括在日期範圍中包含的所有module_types的COUNT爲前50的模塊被關注到。任何想法,我會怎麼做呢? 即。如果一個模塊的所有「計數」的一月,二月和三月的總和高於另一個模塊的「總計」,那麼該模塊的所有三個月將高於其他記錄。按最高總月份分組

我試圖嵌入一個選擇總數和順序,似乎需要大量的時間。

SELECT 
    DATE_FORMAT(tbl_client_modules.c_module_month, '%b %y') AS MONTH, 
    tbl_modules.module_name, 
    count(tbl_client_modules.c_module_type), 
    tbl_client_modules.c_module_type AS MOD_TYPE 
FROM 
    tbl_client_details 
    LEFT OUTER JOIN tbl_client_status ON tbl_client_details.cd_status = tbl_client_status.cl_status_id 
    LEFT OUTER JOIN tbl_client_modules ON tbl_client_details.cd_ZBI_no = tbl_client_modules.cl_module_zbi AND tbl_client_details.cd_UCN = tbl_client_modules.c_module_UCN AND tbl_client_details.cd_co_code = tbl_client_modules.c_module_co_code 
    LEFT OUTER JOIN tbl_modules ON tbl_client_modules.c_module_type = tbl_modules.module_id 
WHERE 
    tbl_client_details.cd_removed_date is null 
    AND TRIM(tbl_client_details.cd_client_name) <> '' 
    AND (tbl_client_details.cd_region = 'WC') 
    AND (tbl_client_modules.c_module_month >= '2012-07-01' AND tbl_client_modules.c_module_month <= '2012-10-30') 
    AND tbl_client_modules.c_module_vol > 0 
GROUP BY tbl_client_modules.c_module_month, tbl_client_modules.c_module_type 
ORDER BY tbl_modules.module_name; 

指標:

tbl_client_details, 0, PRIMARY,  1, cd_id, A, , , , , BTREE, , 
tbl_client_details, 0, PRIMARY,  2, cd_ucn, A, , , , , BTREE, , 
tbl_client_details, 0, PRIMARY,  3, cd_ZBI_no, A, 55351, , , , BTREE, , 
tbl_client_details, 1, cd_ucn,   1, cd_ucn, A, 55351, , , , BTREE, , 
tbl_client_details, 1, cd_opm,   1, cd_OPM, A, 321, , , YES, BTREE, , 
tbl_client_details, 1, cd_zbi_no,  1, cd_ZBI_no, A, 55351, , , , BTREE, , 
tbl_client_details, 1, cd_cpe_rm_code, 1, cd_cpe_rm_code, A, 1729, , , YES, BTREE, , 
tbl_client_details, 1, cd_sic_code, 1, cd_sic_code, A, 802, , , YES, BTREE, , 
tbl_client_details, 1, cd_enrol_date, 1, cd_enrol_date, A, 13837, , , YES, BTREE, , 
tbl_client_details, 1, cd_co_code,  1, cd_co_code, A, 8, , , YES, BTREE, , 
tbl_client_details, 1, cd_client_name, 1, cd_client_name, A, 55351, , , YES, BTREE, , 
tbl_client_details, 1, cd_segment,  1, cd_segment, A, 36, , , , BTREE, , 
tbl_client_details, 1, cd_region,  1, cd_region, A, 18, , , YES, BTREE, , 
tbl_client_details, 1, cd_status,  1, cd_status, A, 295, , , YES, BTREE, , 

tbl_client_status, 0, PRIMARY,  1, cl_status_id, A, 32, , , , BTREE, , 
tbl_client_status, 1, cl_status_id, 1, cl_status_id, A, 32, , , , BTREE, , 

tbl_client_modules, 0, PRIMARY,   1, cl_module_id, A, 12135739, , , , BTREE, , 
tbl_client_modules, 1, cl_module_zbi, 1, cl_module_zbi, A, 53697, , , , BTREE, , 
tbl_client_modules, 1, c_module_type, 1, c_module_type, A, 104, , , , BTREE, , 
tbl_client_modules, 1, c_module_month, 1, c_module_month, A, 27, , , YES, BTREE, , 
tbl_client_modules, 1, c_module_ucn,  1, c_module_ucn, A, 63872, , , YES, BTREE, , 
tbl_client_modules, 1, c_module_co_code, 1, c_module_co_code, A, 9, , , YES, BTREE, , 
tbl_client_modules, 1, c_module_vol,  1, c_module_vol, A, 32020, , , YES, BTREE, , 

tbl_modules,  0, PRIMARY,  1, module_id, A, 109, , , , BTREE, , 
tbl_modules,  1, module_id,  1, module_id, A, 109, , , , BTREE, , 
tbl_modules,  1, module_tab,  1, module_tab, A, 9, , , YES, BTREE, , 
+0

嘗試將您的GROUP BY更改爲GROUP BY DATE_FORMAT(c_module_month,'%b%y'),module_name,c_module_type'。 MySQL在其GROUP BY設置中有一個可怕的錯誤特性。 –

+0

此外,很難說這個查詢是怎麼回事,因爲你沒有用表名限定你的字段名。你的索引在哪裏?另外,如果您的列c_module_month只包含指向幾個月頭幾天的值,則可以通過消除DATE_FORMAT調用來加速此過程。 –

+0

感謝合格的字段名稱和顯示的索引。我會通過建議重試該組。我確實嘗試過,但無法完成它的工作。 – Eishman

回答

0

我找到了 'WITH ROLLUP' 功能是做什麼的,我需要。下一個問題是找到一種排序方法。在這裏工作,這裏有一個答案:sort the "rollup" in group by