2016-05-09 7 views
0

DB таблицы:Оптимизация MySQL запросов (генераторные статистика)

enter image description here

enter image description here

Я получил запрос MySQL:

select calendar.datefield AS date, 
     (SELECT IFNULL(SUM(visits),0) 
      FROM link_stats 
      WHERE link_stats.link_id = '1' 
       AND statDate = date 
    ) AS visits, 
     (SELECT Round(IFNULL(SUM(leads * (rate/1000)),0),3) 
      FROM link_stats 
      WHERE link_stats.link_id = '1' 
       AND statDate = date 
    ) AS cash, 
     (SELECT IFNULL(SUM(leads),0) 
      FROM link_stats 
      WHERE link_stats.link_id = '1' 
       AND statDate = date 
    ) AS leads 
    from `calendar` 
    where `calendar`.`datefield` between '2016-05-10' AND '2016-05-11' 

Я пытаюсь генерировать статистику отчет за связь с пустыми дней ,

Пример:

Между 11-01-2016 до 20-01-2016 и ссылка не имеет записей с датой 12-01-2016.

ответ

0

Постройте стол со всеми возможными датами. Назовите это TableOfDates и один столбец: DateField

Затем переставить что-то вроде этого запроса:

select d.datefield AS date, 
     ls.visits, ls.cash, ls.leads 
    from TableOfDates d 
    LEFT JOIN `calendar` AS c ON c.datefield = d.datefield 
    LEFT JOIN 
     (SELECT statDate, 
       IFNULL(SUM(visits),0) AS visits, 
       Round(IFNULL(SUM(leads * (rate/1000)), 0),3) AS cash, 
       IFNULL(SUM(leads),0) AS leads 
      FROM link_stats 
      WHERE ls.link_id = 1 
       AND statDate between '2016-01-11' AND '2016-01-20' 
      GROUP BY statDate 
    ) AS ls ON ls.statDate = d.datefield 
    where d.datefield  between '2016-01-11' AND '2016-01-20' 
Смежные вопросы