Подтвердить что ты не робот

Группируйте по месяцам и годам в 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";

Запрос разбивается, потому что он (предсказуемо) объединяется в разные годы.

4b9b3361

Ответ 1

GROUP BY YEAR(t.summaryDateTime), MONTH(t.summaryDateTime) DESC;

- это то, что вы хотите.

Ответ 2

GROUP BY DATE_FORMAT(summaryDateTime,'%Y-%m')

Ответ 3

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 для YEAR и Month, чтобы получить правильный порядок.

Ответ 4

Я предпочитаю

SELECT
    MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
    trading_summary t 
GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";

Ответ 5

Я знаю, что это старый вопрос, но следующее должно работать, если вам не нужно название месяца на уровне БД:

  SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month 
    FROM trading_summary  
GROUP BY summary_year_month;

См. документацию по функциям EXTRACT

.Вы, вероятно, найдете, что это лучше работает... и если вы создаете объект JSON на уровне приложения, вы можете выполнять форматирование/упорядочение при выполнении результатов.

N.B. Я не знал, что вы можете добавить 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;

Ответ 6

Вы должны сделать что-то вроде этого

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

Ответ 7

используйте функцию EXTRACT, подобную этой

mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
       -> 2009

Ответ 8

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

Ответ 9

SELECT YEAR(t.summaryDateTime) as yr, GROUP_CONCAT(MONTHNAME(t.summaryDateTime)) AS month 
FROM trading_summary t GROUP BY yr

Тем не менее вам нужно будет обработать его во внешнем script, чтобы получить именно ту структуру, которую вы ищете.

Например, используйте PHP explode для создания массива из списка имен месяцев, а затем используйте json_encode()

Ответ 10

Вы также можете сделать это

SELECT  SUM(amnt) 'value',DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12

заказать по году и месяцу. Допустим, вы хотите сделать заказ с этого года и с этого месяца вплоть до 12 месяцев

Ответ 11

Вот как я это делаю:

GROUP BY  EXTRACT(YEAR_MONTH FROM t.summaryDateTime);

Ответ 12

Использование

GROUP BY year, month DESC";

Вместо

GROUP BY MONTH(t.summaryDateTime) DESC";