2010-09-24 4 views
2

cher all..je veux faire un rapport qui obtiennent des données pour un semestre. ce semestre a débuté en avril et s'est terminé en septembre de chaque année. Mais pour le deuxième semestre, il recevra des données d'octobre à mars (l'année prochaine). Comment faire pour regrouper ou agréger? Je suis maintenant la requête de base comme:obtenir des données pour un semestre dans mysql

select * from dt_tb where `dt` >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) 

Répondre

0

Quelque chose comme:

SELECT * 
FROM dt_tb 
WHERE (dt >= '2010-10-01') AND (dt < '2011-05-01') 

(toutes les données pour la période commençant le 1er Octobre et se terminant avant le 1er mai, qui est Avril 30ème). L'utilisation de DATE_SUB() et CURDATE() est très bien si vous voulez une fenêtre glissante, mais si vous avez besoin de points de début et de fin fixes dans le temps, comme un semestre, il est préférable d'utiliser des dates réelles. De plus, votre méthode récupèrerait toutes les données des semestres à terme qui ne se sont pas encore produites, car votre clause WHERE dit essentiellement «donnez-moi tout dans la base de données qui date de plus de 6 mois». Si vous stockez les semestres des deux prochaines années, vous les obtiendrez également. En spécifiant les dates de début/fin, vous obtenez seulement le semestre que vous voulez réellement.

Questions connexes