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


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

2888   11  

11 ответов:

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

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

GROUP BY DATE_FORMAT(summaryDateTime,'%Y-%m')
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

используйте функцию извлечения, как это

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

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

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;

использовать

GROUP BY year, month DESC";

вместо

GROUP BY MONTH(t.summaryDateTime) DESC";

Comments

    Ничего не найдено.