8
votes

Comment puis-je regrouper le mois et l'année lorsqu'un champ DateTime seulement?

J'ai un schéma de table qui est essentiellement un tas d'informations de transaction avec un champ DateTime xxx

J'ai besoin de générer un total mensuel de transactions, qui est la somme (montant), mais je Possédé de ce que je groupe par. Chaque rangée de SQL devrait contenir le total mensuel (donc une ligne du 09 janvier, février 09 ... Jan 2010 et ainsi de suite). Je pense que je devrais devoir générer la table par code, mais j'aimerais apprendre s'il existe un moyen de résoudre ce problème en utilisant SQL.

Toute aide serait appréciée! (Utilisation de MySQL 5.3, PHP5)


1 commentaires

Il suffit de remarquer pour newbie, quand est le nom de la colonne de table et non une fonction MySQL.


5 Réponses :


3
votes

J'ai toujours utilisé mensuel () et année () ... qui semble un peu comme un hack pour moi, mais ça marche ...

SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date)


0 commentaires

5
votes
    SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount)
      FROM TRANSACTION
  GROUP BY EXTRACT(YEAR_MONTH FROM when)

0 commentaires

2
votes

J'essaierais quelque chose comme ça:

SELECT
  YEAR(when) AS year,
  MONTH(when) AS month,
  SUM(amount) AS amount
FROM
  TRANSACTION
GROUP BY
  YEAR(when),
  MONTH(when)
ORDER BY
  YEAR(when),
  MONTH(when)


0 commentaires

19
votes

Vous devez grouper par extraits.

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    month, 
    year
ORDER BY 
    year DESC, 
    month DESC


0 commentaires

1
votes

Je pense que vous voulez:

SELECT SUM(amount)
FROM yourTable
GROUP BY CONCAT(YEAR(date), '-', MONTH(date))


0 commentaires