J'ai un système de facturation et j'essaie de générer des rapports sur les heures passées. J'enregistre chaque changement de commande, il y a donc plusieurs entrées pour presque chaque article sur chaque facture. Pour cette raison, je filtre les anciens changements et j'essaie de n'utiliser que les plus récents. Chaque instance partageant un ID de projet, un ID de phase et un même week-end est le même article sur la facture. Je souhaite générer un rapport et saisir uniquement les versions les plus récentes de ces éléments.Utiliser la date de création la plus récente dans le groupe par l'instruction
table Exemple:
id project_id phase_id weekstart created
---------------------------------------------------------------
1 6 apple 2017-04-20 2017-04-23
2 6 apple 2017-04-20 2017-04-24
3 8 banana 2017-04-20 2017-04-23
4 9 pear 2017-04-20 2017-04-23
5 9 pear 2017-04-20 2017-04-25
Je veux être en mesure d'exécuter une requête pour obtenir:
id project_id phase_id weekstart created
---------------------------------------------------------------
2 6 apple 2017-04-20 2017-04-24
3 8 banana 2017-04-20 2017-04-23
5 9 pear 2017-04-20 2017-04-25
Actuellement, je suis en utilisant quelque chose comme:
SELECT * from invoiceitems where employee_id = 10
group by project_id, phase_id, weekstart
Mais cette ne tient pas compte de la date de création.
La commande des résultats n'a aucun effet sur l'instruction group by. J'ai vérifié pour des messages similaires, mais seulement deux que j'ai trouvé cherchent à commander par la date de création la plus élevée ou ne sont pas regrouper les résultats par plusieurs colonnes.
Pouvez-vous poster le résultat de la requête que vous utilisez? – Bdloul
'SELECT *' n'est pas une clause SELECT valide dans une requête GROUP BY. Une requête 'GROUP BY' ne retourne pas de lignes de la table, elle ** génère ** à la volée la ligne qu'elle place sur le jeu d'enregistrements; pour chaque ligne générée, il utilise un groupe de lignes extraites de la requête. Il y a plusieurs valeurs pour 'id' dans un groupe (parce que' id' n'est pas dans la clause 'GROUP BY'), c'est pourquoi' id' dans la clause 'SELECT' est ambigu. Une requête 'GROUP BY' ** n'est pas ** la solution à votre question. – axiac
@axiac C'est en quelque sorte la pointe de l'iceberg. –