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, ,
尝试将您的GROUP BY更改为GROUP BY DATE_FORMAT(c_module_month,'%b%y'),module_name,c_module_type'。 MySQL在其GROUP BY设置中有一个可怕的错误特性。 –
此外,很难说这个查询是怎么回事,因为你没有用表名限定你的字段名。你的索引在哪里?另外,如果您的列c_module_month只包含指向几个月头几天的值,则可以通过消除DATE_FORMAT调用来加速此过程。 –
感谢合格的字段名称和显示的索引。我会通过建议重试该组。我确实尝试过,但无法完成它的工作。 – Eishman