2016-11-30 2 views
1

У меня есть эта форма таблицы enter image description hereMySQL: Группа по DATETIME (час - день - месяц - год)

я хочу графа вставки, которые имеют тип = «non_repondu» и сгруппировать результаты по 3 критериям.

1-client_id

2-queue_id

и

3 Дата и время: час, день, за месяц и год

До сих пор я сделали это:

SELECT `client_id`,`queue_id`,`datetime`,COUNT(`type`) 
AS nombre_appels_repondus 
FROM `appels` 
where `type`= "non_repondu" 
group by `appels`.`client_id`,`appels`.`queue_id`,`appels`.`datetime 

enter image description here

, но как это я только фильтруюсь полной колонка даты и времени, что приводит меня таблицу каждой уникальной дату и время линии отдельно, как я могу получить результат на час , день, месяц и год ???

ответ

1

Использование DATE_FORMATE() в группе К статье. Надеюсь, что она должна быть решена ваша проблема

SELECT 
    `client_id`, 
    `queue_id`, 
    `datetime`, 
    COUNT(`type`) AS nombre_appels_repondus 
FROM 
    `appels` 
WHERE 
    `type` = "non_repondu" 
GROUP BY 
    `appels`.`client_id`, 
    `appels`.`queue_id`, 
    DATE_FORMAT(
     `appels`.`datetime`,'%Y-%m-%d %H'); 

ИЛИ

Если вы хотите добавить в выбранном списке столбцов с день, месяц, год и час, пожалуйста, попробуйте это один

SELECT 
    `client_id`, 
    `queue_id`, 
    `datetime`, 
    DATE_FORMAT(`appels`.`datetime`, '%Y-%m-%d') AS DAY, 
    DATE_FORMAT(`appels`.`datetime`, '%Y-%m') AS MONTH, 
    DATE_FORMAT(`appels`.`datetime`, '%Y') AS YEAR, 
    DATE_FORMAT(`appels`.`datetime`, '%H') AS HOUR, 
    COUNT(`type`) AS nombre_appels_repondus 
FROM 
    `appels` 
WHERE 
    `type` = "non_repondu" 
GROUP BY 
    `appels`.`client_id`, 
    `appels`.`queue_id`, 
    DATE_FORMAT(
     `appels`.`datetime`, 
     '%Y-%m-%d %H' 
    ); 
+0

# 1055 - Выражение №4 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец 'asterisk_bi.appels.datetime', который не зависит от функциональности столбцы в разделе GROUP BY; это несовместимо с sql_mode = only_full_group_by – firasKoubaa

+0

Следуйте за этим http://stackoverflow.com/questions/37951742/1055-expression-of-select-list-is-not-in-group-by-clause-and-contains-nonaggr , надеюсь, что это должно решить вашу проблему. – Faisal

+0

Я работаю на удаленном сервере, который я не могу изменить, но я решаю его, делая это: ANY_VALUE ('datetime'), DATE_FORMAT (ANY_VALUE (' appels'.'datetime'), '% d ') AS DAY, (вы можете уточнить свой ответ посетителям) – firasKoubaa

0

Вы должны быть более точным с группой заявлением

SELECT `client_id`,`queue_id`,`datetime`,COUNT(`type`) 
AS nombre_appels_repondus 
FROM `appels` 
WHERE `type`='non_repondu' 
GROUP BY `appels`.`client_id`, 
    `appels`.`queue_id`, 
    YEAR(`appels`.`datetime`) , 
    MONTH(`appels`.`datetime`), 
    DAY(`appels`.`datetime`), 
    HOUR(`appels`.`datetime`) 
+0

Я получил эту ошибку: # 1055 - Выражение №3 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец «asterisk_bi.appels.datetime», который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by – firasKoubaa

+0

См. второй ответ (более высокий) на этот вопрос: http://stackoverflow.com/questions/23921117/disable-only-full-group-by о том, как отключить режим only_full_group_by @ firasKoubaa – baao

+0

Я использовал это, чтобы устранить эту проблему: ANY_VALUE ('datetime') – firasKoubaa

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