2012-01-31 109 views
0

您好我写了这个查询MySQL查询修改

SELECT cl_brands.name AS Brand,DATE_FORMAT(cl_doctor_call.date_entered,'%b%y')AS MonthYear, 

SUM(FIND_IN_SET(CONCAT('^',cl_brands.id,'^'),cl_doctor_call_cstm.brand_discussed_c))AS No_Times_Brand_Discussed 
FROM cl_doctor_call LEFT JOIN cl_doctor_call_cstm ON 
cl_doctor_call.id=cl_doctor_call_cstm.id_c 
LEFT JOIN cl_brands ON 
CONCAT('^',cl_brands.id,'^') LIKE CONCAT(cl_doctor_call_cstm.brand_discussed_c, '%') 
WHERE (cl_doctor_call.date_entered) 
BETWEEN CURDATE()-INTERVAL 3 MONTH AND CURDATE() 
GROUP BY cl_brands.name,MonthYear 
ORDER BY No_Times_Brand_Discussed DESC limit 1 

该查询为我们提供了与品牌名称和monthyear讨论最高的品牌。

如:

Brand Monthyear No_Times_Brand_Discussed 
    x  Nov11    5 

现在我想展示品牌讨论的'同一品牌的'细节过去2个月(这意味着我的查询应返回结果所有同品牌的详细信息的详细过去2个月) 所以我的结果会是这样的。

Brand Monthyear No_Times_Brand_Discussed 

    x  Nov11    5 
    x  Oct11    0 
    x  Sep11    1 

告诉我如何修改我的上述查询,以便它能给我这个结果。

回答

0

如果我正在阅读此权利,本质上,您只需按照日期排列的最受欢迎的品牌的前3名结果。所以,你只需要以同样的方式查询你的原始表格,但是包含一个“in”子句,它将你限制在最讨论的品牌中。我会使用ID而不是名称字段,因此您知道它是唯一的。我假设字段名称是“brand_id”,但在表格中可能有所不同。

select cl_brands.name AS Brand,DATE_FORMAT(cl_doctor_call.date_entered,'%b%y')AS MonthYear, 
SUM(FIND_IN_SET(CONCAT('^',cl_brands.id,'^'),cl_doctor_call_cstm.brand_discussed_c))AS No_Times_Brand_Discussed 
from cl_doctor_call LEFT JOIN cl_doctor_call_cstm ON 
cl_doctor_call.id=cl_doctor_call_cstm.id_c 
LEFT JOIN cl_brands ON 
CONCAT('^',cl_brands.id,'^') LIKE CONCAT(cl_doctor_call_cstm.brand_discussed_c, '%') 
where brand_id in 
(
    SELECT c1.brand_id 
    FROM cl_doctor_call LEFT JOIN cl_doctor_call_cstm ON 
    cl_doctor_call.id=cl_doctor_call_cstm.id_c 
    LEFT JOIN cl_brands ON 
    CONCAT('^',cl_brands.id,'^') LIKE CONCAT(cl_doctor_call_cstm.brand_discussed_c, '%') 
    WHERE (cl_doctor_call.date_entered) 
    BETWEEN CURDATE()-INTERVAL 3 MONTH AND CURDATE() 
    GROUP BY cl_brands.name,MonthY`enter code here`ear 
) 
order by date_entered 
limit 3 
+0

是你的查询逻辑是正确的,但我现在得到错误的结果。如果我们只执行where子句,我们可以得到关于哪个品牌被讨论最高次数的细节。但最终的结果与这个结果相冲突......为什么如此呢? – Java 2012-01-31 13:35:28

+0

您能否举一个两个结果如何不同的例子? – Jody 2012-01-31 20:01:20

+0

where子句将返回所有正在讨论的brands_id,这是正确的,但可能因为错误的group by子句我们得不到确切的结果。 (因为我知道,通过查看数据库记录,讨论哪个品牌的次数最多) – Java 2012-02-01 07:57:31