2015-01-26 5 views
0

У меня есть информация о вызове таблицы mySql. В таблице подробностей указывается дата вызова столбца, которая имеет дату, такую ​​как 2015-02-01. С одной и той же даты может быть несколько строк.группа на основе части значения столбца в mySql

Я хочу найти, сколько строк COUNT() оно содержит для каждого месяца года.

, например,

'568', '192.168.1.100', '790', '1.00', '2014-11-14'  
'569', '192.168.1.100', '780', '1.00', '2014-11-14' 
'699', '192.168.1.100', '780', '1.00', '2014-11-16' 
'767', '192.168.1.102', '780', '1.00', '2014-12-15' 
'768', '192.168.1.102', '780', '1.00', '2014-12-15' 

это должно дать COUNT как:

'2014-11-' as 3 
'2014-12-' as 2 

Как я могу сделать это с помощью SQL SELECT запрос.

+0

Пожалуйста, создайте SQLfiddle для вашего случая – madforstrength

+0

Создать таблицу с вашими данными примера (http://www.sensefulsolutions.com/2010/10/format-text-as-table.html) и опубликовать текущий запрос, упростит ситуацию. Прямо сейчас я не знаю, как выглядит ваш стол, но я чувствую, что есть решение. – Spurious

ответ

1

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

SELECT month(calldate) as m, year(calldate) as y, count(*) 
FROM calldetails 
GROUP by m, y; 

Учитывая дополнительную информацию, я хотел бы сделать следующее:

SELECT YEAR(detailtable.date) as y, 
    MONTH(detailtable.date) as m, 
    AVG(detailtable.loadstate) as "load", 
    count(detailtable.loadstate) as "count" 
FROM ruby_snmp.detailtable 
WHERE ipaddtress='192.168.1.102' and date LIKE '2014-12-%' 
GROUP BY y, m; 

Переменные формата у и м будет игнорируются, но должны быть там, чтобы группа работала. Вы можете добавить функцию FORMAT, чтобы указать конкретный YYYY-MM, как было упомянуто во втором сообщении, или вы можете обрабатывать представление данных в записи программы/отчета.

+0

Спасибо за ваш ответ. это мой запрос SELECT detailtable.date, AVG (detailtable.loadstate) как «load», count (detailtable.loadstate) как «count» из ruby_snmp.detailtable, где ipaddtress = '192.168.1.102' и date LIKE '2014-12- % 'GROUP BY detailtable.date; но это должно получить счет за каждый день, как я могу ответить на ваш вопрос для получения счета за каждый месяц ... пожалуйста, помогите – dennypanther

3
Select DATE_FORMAT(My_Call_Date_Field, '%Y-%m') as MyYearAndMonth, Count(*) as MyCount 
From My_Call_Details_Table Group By DATE_FORMAT(My_Call_Date_Field, '%Y-%m') 

Вы также можете использовать CAST function of MySql.

Select substr(convert(My_Call_Date_Field, CHAR), 1, 7) as MyYearAndMonth, Count(*) From My_Call_Details_Table Group By substr(convert(My_Call_Date_Field, CHAR), 1, 7) Order By substr(convert(My_Call_Date_Field, CHAR), 1, 7) 

В ответ на дополнительную информацию конкретного к вашему делу, как показано на ваш комментарий к предыдущему ответу Эд Кинг: вот это:

SELECT DATE_FORMAT(detailtable.date, '%Y-%m') , AVG(detailtable.loadstate) as "load",count(detailtable.loadstate) as "count" from ruby_snmp.detailtable where ipaddtress='192.168.1.102' and date LIKE '2014-12-%' GROUP BY DATE_FORMAT(detailtable.date, '%Y-%m') 
+1

Большое спасибо! Я узнал, как использовать объект mySql Date из вашего примера. Это поворотный момент для моего вопроса !!. Наконец мой запрос работает отлично ... – dennypanther

+0

Могу ли я попросить вас отметить один из ответов, один из которых Эд Кинг или один из меня, как ответ на этот вопрос, чтобы вопрос был отмечен как разрешенный? –

+1

Я получил ответы, объединив оба ваших ответа. Так что кредит должен идти к вам обоим. Я не могу точно назвать один ответ правильным ответом. – dennypanther

Смежные вопросы