Группировка по месяцам и годам в MySQL
учитывая таблицу с меткой времени в каждой строке, как бы вы отформатировали запрос, чтобы вписаться в этот конкретный формат объекта json.
Я пытаюсь организовать объект json в годы / месяцы.
json, чтобы основать запрос:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
вот запрос, который у меня есть до сих пор -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
запрос ломается, потому что он (предсказуемо) объединяет разные годы.
11 ответов:
SELECT MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year FROM trading_summary t GROUP BY YEAR(t.summaryDateTime) DESC, MONTH(t.summaryDateTime) DESCследует использовать DESC как для года, так и для месяца, чтобы получить правильный заказ.
предпочитаю
SELECT MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year FROM trading_summary t GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";
вы должны сделать что-то подобное
SELECT onDay, id, sum(pxLow)/count(*),sum(pxLow),count(`*`), CONCAT(YEAR(onDay),"-",MONTH(onDay)) as sdate FROM ... where stockParent_id =16120 group by sdate order by onDay
SELECT YEAR(t.summaryDateTime) as yr, GROUP_CONCAT(MONTHNAME(t.summaryDateTime)) AS month FROM trading_summary t GROUP BY yrеще необходимо обработать его во внешнем скрипте получить именно ту структуру, которую вы ищете.
например, используйте PHP explode для создания массива из списка имен месяцев, а затем используйте json_encode ()
вы cal также сделать это
SELECT SUM(amnt) `value`,DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12заказать по годам и месяцам. Допустим, вы хотите заказать с этого года и этого месяца вплоть до 12 месяцев
Я знаю, что это старый вопрос, но следующее должно работать, если вам не нужно имя месяца на уровне БД:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month FROM trading_summary GROUP BY summary_year_month;см. раздел извлечение функции docs
вы, вероятно, найдете это лучше выполнять.. и если вы создаете объект JSON на уровне приложения, вы можете выполнить форматирование/упорядочение по мере выполнения результатов.
Б. Н. я не знал, что вы можете добавить DESC в предложение GROUP BY в MySQL, возможно, Вам не хватает предложения ORDER BY:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month FROM trading_summary GROUP BY summary_year_month ORDER BY summary_year_month DESC;
Comments