J'essaie de sélectionner un ensemble d'enregistrements à partir d'une table de commandes en fonction du dernier état de cet enregistrement. Le statut est conservé dans une autre table appelée orderStatus. Ma table est plus complexe, mais voici un exemple de baseSQL Sélectionnez les derniers enregistrements
table - commandes:
orderID
table - OrderStatus:
orderStatusID
orderID
orderStatusCode
dateTime
Une commande peut avoir plusieurs enregistrements d'état, je Je veux simplement obtenir les commandes qui ont le dernier statusCode de ce que je demande. Le problème est que je reçois beaucoup de doublons. Voici un exemple de base.
select orders.orderID
from orders inner join orderStatus on orders.orderID = orderStatus.orderID
where orderStatusCode = 'PENDING'
J'ai essayé de faire une requête interne pour sélectionner le top 1 de la table orderStatus ordonnée par dateTime. Mais je voyais toujours la même duplication. Quelqu'un peut-il me diriger dans la bonne direction sur la façon de s'y prendre?
edit: SQL server 2008
Vous avez un enregistrement pour chaque ID de commande dans le tableau de l'état des commandes? Je suppose que non, donc vous avez besoin de grouper par orderID et ordre par 'dateTime'. 'SELECT orders.orderID FROM blablabla O order orderStatusCode = 'PENDING' GROUP PAR orders.orderID ORDER BY orderStatus.dateTime DESC' – Sal00m
Si vous le limitez à un certain système de base de données (MySQL/SQL Server/Oracle/...) et peut-être même une version minimale, il peut y avoir des solutions plus simples. –