2009-10-17 13 views
0

Je suis en train d'écrire une requête pour savoir combien commission que la société de mon client gagne en un mois comme ci-dessousrequête sql - Commission calcul sur 12 mois

SELECT (rate * SUM(duration)/180) as commission 
     FROM teacher, person, lesson 
     WHERE person.id = teacher.person_id 
     AND lesson.teacher = person.id 
     AND MONTH(start_time) = MONTH(NOW()) 
     GROUP BY person.id 

Cela est bien pour travailler ce mois-ci , mais comment ferais-je cela pour donner des résultats pour les 12 derniers mois?

Répondre

0

Utilisez GROUP BY person.id, MONTH(start_time) et modifiez la dernière clause AND dans le WHERE en MONTH(NOW()) - MONTH(start_time) <= 12.

+0

ce n'est pas bon quand il y a plusieurs années dans la base de données, mais j'ai l'idée – Robert

+0

@Robert, c'est équivalent à la vérification 'MONTH' de l'original - si une vérification 'YEAR' est nécessaire ici, c'est aussi nécessaire dans l'original. Je soupçonne que vous êtes dans une analyse proche de la table complète dans les deux cas (mysql ne peut pas utiliser un index pour les expressions calculées telles que 'MONTH (blah)'), mais la seule solution de contournement, si c'est en effet un problème, serait de dénormaliser la table ('lesson', je suppose) en ajoutant un champ' month' logiquement redondant et un index composite approprié. –