J'essaie d'écrire un rapport qui rejoindra une personne, leur travail, et leur salaire horaire au moment du travail. Je n'arrive pas à trouver le meilleur moyen de joindre le coût de la personne lorsque la date est inférieure à la date du travail.MySQL - Comment puis-je jointure interne tri des données jointes
Disons que une personne coûte 30 $ par heure au début de l'année, puis a obtenu une augmentation de 10 $ o 5 février et un autre le 1er mars
- 01/01/2010 30,00 $ (par heure)
- 02/05/2010 40,00 $
- 03/01/2010 45,00 $
La personne mis en heures plusieurs jours qui enjambent les rasies.
- 01/05/2010 10 heures (devrait être à 30 $/h)
- 01/27/2010 5 heures (de nouveau à 30 $)
- 02/10/2010 10 heures (à 40 $/h)
- 03/03/2010 5 heures (à 45 $/h)
Je suis en train d'écrire une instruction SQL qui va tirer les heures, le coût par heure, et les heures * coût. Le coût est le taux horaire dernier entré dans le système si la date de coût est inférieur à la date de travail, ordonnée par date limite de coût 1.
SELECT person.id, person.name, work.hours, person_costs.value,
work.hours * person_costs.value AS value
FROM person
JOIN work ON person.id = work.person_id
JOIN person_costs ON person.id = person_costs.person_id
AND person_costs.date < work.date
WHERE person.id = 1234
ORDER BY work.date ASC
Le problème que je vais avoir, les person_costs ne sont pas commandés par date dans l'ordre décroissant. Il sort "any" valeur (naturellement triée par position d'enregistrement) qui correspond à la condition. Comment puis-je sélectionner la première valeur person_cost qui est plus ancienne que la date de travail?
Merci!
Cette solution fonctionnera le mieux pour moi car la requête sera plus rapide qu'une sous-requête (en boucle sur des millions d'enregistrements tous les soirs). Construire le CRUD pour le person_cost était plus compliqué avec toutes les valises, mais ça en valait la peine. – Gary