2010-02-09 2 views
0

Я использую Open Flash Chart для создания статистики, и одна из вещей, которые мне нужно сделать, - это создать таблицу с разбивкой по строкам.Выбор отдельных месяцев и лет, а затем разбивка значений для

Логично мне нужно иметь возможность группировать все отдельные месячные/годовые комбинации, декабрь 2009 года, январь 2010 года, февраль 2010 года и т. Д., А затем из этой группы все различные строки, то есть различные типы запросов, сделанных посетителем (через веб-сайт, по электронной почте, через PhoneCall)

на данный момент атрибуты таблиц выглядеть следующим образом:

идентификатора (междунар, автоматическое приращение) date_time (формат дата и время) типа (перечисления, посещение, веб-сайт, телефон, электронная почта)

Любые предложения? Я пробовал несколько вещей и не имел большой удачи.

ответ

1

Что-то, как это должно работать:

select count(*), type, YEAR(date_time), MONTH(date_time) from `table` 
group by type, YEAR(date_time), MONTH(date_time) 
1
SELECT EXTRACT(YEAR_MONTH FROM date_time) AS ym, type, COUNT(*) 
FROM mytable 
GROUP BY 
     ym, type 
+0

Круто, не знал о 'экстракте (year_month ...)'! – Andomar

0

Вы можете создать таблицу с месяц поле, и заполнить его на несколько месяцев вы заинтересованы, например:

StartOfMonth 
2010-01-01 
2010-02-01 
2010-03-01 
... 

Затем вы можете использовать left join в группу всех месяцев:

select  
    year(mt.StartOfMonth) 
, month(mt.StartOfMonth) 
, e.type 
, count(*) 
from  MonthTable mt 
left join Enquiries e 
on   mt.StartOfMonth <= e.EnquiryDate 
      and e.EnquiryDate < mt.StartOfMonth + interval 1 month 
where  mt.StartOfMonth <= NOW() 
group by year(mt.StartOfMonth), month(mt.StartOfMonth), e.type 
1

Группировка по году и месяцу SQL, может выглядеть следующим образом:

SELECT DATE_FORMAT(date_time, '%Y-%m') AS yearmonth, 
     COUNT(*) AS count_month 
FROM table_name 
GROUP BY yearmonth 
Смежные вопросы