J'ai une table avec quelques données: mois_number (int), année (int).
Je veux obtenir des données basées sur 2 ans et 2 mois p> Mais je n'obtiens que des données pour un mois 'mai' de 2014 à 2018, mais l'idée est d'obtenir des données de mai 2014 ---> mai 2018 p> pouvez-vous m'aider s'il vous plaît? P> < / p>
4 Réponses :
Vous voulez seulement comparer des mois pour la première et la dernière année: Alternativement: p> ou, non pris en charge par MySQL: P> WHERE (tt.year, tt.month_number) >= (2014,5) AND (tt.year, tt.month_number) <= (2018,5)
Mate de typage rapide.
Le dernier filtre aboutira à un erreur comme vous attendez. Je voulais essayer cela parce que je n'ai jamais vu la syntaxe utilisée avant (mon) SQL,
@RAYMONDNIJLAND, j'ai supprimé la clause Where et j'ai trouvé votre requête correcte!
Eh bien, j'ai enlevé le commentaire parce que je pensais où (tt.year, tt.month)> = (2014,5) et (tt.year, tt.month) <= (2018,5) code> générerait des résultats non valides..well il est en effet N'a pas et je n'ai pas désactivé ' t validez les résultats avant, je pense avoir besoin de caféine mal ..
Je pense que ce dont vous avez besoin est la suivante:
SELECT tt.year AS raw_annee, tt.month AS raw_mois, tt.product AS raw_produit, tt.quantity_product AS tonnes_prod, tt.quantity_n AS raw_tonnes_N, tt.quantity_p AS raw_tonnes_P, tt.quantity_k AS raw_tonnes_K FROM test_test as tt WHERE (tt.year > 2014 AND tt.year < 2018) OR (tt.year = 2014 AND tt.month_number >= 5) OR (tt.year = 2018 AND tt.month_number <= 5) ORDER BY tt.year desc, tt.month_number desc;
Autre moyen avec la date de construction:
WHERE STR_TO_DATE(CONCAT(tt.year,'-',tt.month_number,'-',01), '%Y-%m-%d') >= '01-05-2014' AND STR_TO_DATE(CONCAT(tt.year,'-',tt.month_number,'-',01), '%Y-%m-%d') <= '01-05-2018'
Vous pouvez toujours faire la comparaison comme une date: Si vous devez faire des comparaisons de date, je vous recommande de stocker les valeurs comme dates. P> p>
Quel SGBD. MySQL ou MS SQL Server?
@jarlh mysql ....