MySQL запрос Изменить - PullRequest
       7

MySQL запрос Изменить

0 голосов
/ 31 января 2012

Привет, я написал этот запрос

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

Этот запрос дает нам наивысшую оценку бренда с названием бренда и месяцем.

Например:

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

Скажите, как я могу изменить мой запрос выше, чтобы он дал мне этот результат.

1 Ответ

0 голосов
/ 31 января 2012

Если я читаю это правильно, по сути, вам просто нужно получить топ-3 результатов, упорядоченных по дате, для бренда, который является наиболее обсуждаемым. Таким образом, вам просто нужно запросить исходные таблицы таким же образом, но включить предложение «in», которое ограничивает вас наиболее обсуждаемым брендом. Я бы использовал ID вместо поля Name, чтобы вы знали, что оно уникально. Я предполагаю, что имя поля «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
...