[MySQL] - Sélection d'un relevé du mois précédent

- Sélection d'un relevé du mois précédent [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 26-05-2019 à 11:58:35    

Bonjour,
 
J'ai une table "releves" avec ceci comme champs:
- id (int)
- date (date)
- releves (float)
 
J'ai un relevé par mois.
 
Je souhaiterais récupéré comme résultats la liste des relevés pour une année demandée, et pour chacun en plus le relevé du mois précédent.
 
Exemple de résultats:
 
janvier 2018 - 230 - 225 (225 correspondant au relevé du mois de décembre 2017)
Février 2018 - 236 - 230
Mars 2018 - 241 - 236
Etc...
 
Ma requête actuelle:
 

Code :
  1. SELECT
  2.                         date,
  3.                         releve,
  4.             (SELECT
  5.       releve
  6.      FROM
  7.       maconso_eau e
  8.      WHERE
  9.       MONTH(e.date) = MONTH(date)  - INTERVAL 1 MONTH) AS previous
  10.                     FROM
  11.                         releves
  12.                     WHERE
  13.                         YEAR(date)=:annee
  14.                     ORDER BY
  15.                         date ASC


 
Le "previous" est toujours à null. Purquoi pas, mais je ne parviens pas à trouver la solution...
Merci! :)

Reply

Marsh Posté le 26-05-2019 à 11:58:35   

Reply

Marsh Posté le 26-05-2019 à 12:05:16    

Le temps de poster la question et j'ai trouvé quelque chose qui marche mais j'ai un doute sur le fait que ça soit une solution "idéale":
 

Code :
  1. SELECT
  2. ce.date,
  3.         ce.releve,
  4.         (SELECT
  5.  releve
  6. FROM
  7.  releves e
  8. WHERE
  9.  MONTH(e.date) = MONTH(ce.date - INTERVAL 1 MONTH)
  10.         LIMIT 0,1) AS previous
  11. FROM
  12. releves ce
  13. WHERE
  14. YEAR(ce.date)=:annee
  15. ORDER BY
  16. ce.date ASC


 
Si je ne précise pas de LIMIT dans ma requête imbriquée j'ai une erreur de cardinalité, le résultat me renvoyant plus d'une ligne et ça je ne comprends pas pourquoi car pour moi je lui demande juste le releve du mois précédent.
Bref, si vous avez quelque chose de plus propre je suis preneur...
 
Merci! :)

Reply

Marsh Posté le 30-05-2019 à 10:05:46    

Tu peux faire un truc similaire mais en mettant 2 fois la table releves dans le FROM (donc pas besoin de sous-requête).
 
SELECT ce1.date, ce1.releve, ce2.releve AS Previous FROM releves ce1 INNER JOIN releves ce2 ON (MONTH(ce2.date) = MONTH(ce1.date - INTERVAL 1 MONTH)) WHERE YEAR(ce1.date)=:annee
ORDER BY
ce1.date


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-06-2019 à 17:02:12    

Bonjour,
 
En effet, je trouve ça plus propre comme méthode, pas pensé à ça.
Merci!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed