Учитывая таблицу с меткой времени в каждой строке, как бы вы отформатировали запрос, чтобы он соответствовал этому конкретному формату объекта 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";
Запрос не работает, потому что (как и ожидалось) объединяет разные годы.
DATE_FORMAT(t.summaryDateTime, '%Y-%m')
DATE_FORMAT( FROM_UNIXTIME(t.summaryDateTime), '%Y-%m' )
GROUP BY YEAR(date), MONTH(date) DESC;
(~ 450 мс) иGROUP BY DATE_FORMAT(date,'%Y-%m')
(~ 850 мс) в таблице InnoDB с> 300 000 записей показал, что первое (отмеченный ответ на этот вопрос) заняло примерно половину времени, чем второе.источник
я предпочитаю
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 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 EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month FROM trading_summary GROUP BY summary_year_month;
См. Документацию по функции EXTRACT
Вы, вероятно, обнаружите, что это работает лучше ... и если вы создаете объект JSON на уровне приложения, вы можете выполнять форматирование / упорядочивание по мере просмотра результатов.
NB Я не знал, что вы можете добавить 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;
источник
EXTRACT(YEAR_MONTH FROM summaryDateTime)
это201901
Вы должны сделать что-то вроде этого
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 SUM(amnt) `value`,DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12
заказать по году и месяцу. Допустим, вы хотите сделать заказ в этом году и в этом месяце вплоть до 12 месяцев.
источник
Вы группируете только по месяцам, вам нужно добавить YEAR () в группу по
источник
используйте функцию EXTRACT, как это
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 ()
источник
Использовать
Вместо того
источник