Dada uma tabela com um carimbo de data / hora em cada linha, como você formataria a consulta para caber neste formato de objeto json específico.
Estou tentando organizar um objeto json em anos / meses.
json para basear a consulta:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
Aqui está a consulta que tenho até agora -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
A consulta está se desfazendo porque (previsivelmente) agrupa os diferentes anos.
DATE_FORMAT(t.summaryDateTime, '%Y-%m')
DATE_FORMAT( FROM_UNIXTIME(t.summaryDateTime), '%Y-%m' )
GROUP BY YEAR(date), MONTH(date) DESC;
(~ 450 ms) eGROUP BY DATE_FORMAT(date,'%Y-%m')
(~ 850 ms) em uma tabela InnoDB com> 300.000 entradas mostrou que o primeiro (a resposta marcada para esta pergunta) levou cerca de metade do tempo que o último.fonte
Deve usar DESC para YEAR e Month para obter a ordem correta.
fonte
eu prefiro
fonte
Eu sei que esta é uma pergunta antiga, mas o seguinte deve funcionar se você não precisar do nome do mês no nível do banco de dados:
Veja a documentação da função EXTRACT
Você provavelmente achará que este tem um desempenho melhor .. e se estiver construindo um objeto JSON na camada do aplicativo, você pode fazer a formatação / ordenação à medida que executa os resultados.
NB, eu não sabia que você poderia adicionar DESC a uma cláusula GROUP BY no MySQL, talvez esteja faltando uma cláusula ORDER BY:
fonte
EXTRACT(YEAR_MONTH FROM summaryDateTime)
é201901
Você deve fazer algo assim
fonte
Você também pode fazer isso
para solicitar por ano e mês. Digamos que você queira fazer o pedido deste ano e deste mês até os 12 meses
fonte
use a função EXTRACT como esta
fonte
Você está agrupando por mês apenas, você deve adicionar YEAR () ao grupo por
fonte
Ainda assim, você precisaria processá-lo em um script externo para obter exatamente a estrutura que está procurando.
Por exemplo, use o explode do PHP para criar um array da lista de nomes de meses e, em seguida, use json_encode ()
fonte
É assim que eu faço:
fonte
Usar
Ao invés de
fonte