2017-10-10 17 views
0

J'ai actuellement 4 tables que je demande à la liste d'état des ordres. Tableaux avec domaine concerné ressemblent à ceObtenir le dernier enregistrement par timestamp dans une requête de jointure gauche

+--------------+ +------------+ +----------+ +----------+ 
|Orders  | | Customers | | Users | | Status | 
+--------------+ +------------+ +----------+ +----------+ 
| id   | | id   | | id  | | id  | 
| customer_id | | name  | | name  | | order_id | 
| rep_id  | +------------+ +----------+ | status | 
+--------------+        | comments | 
              | date  |Timestamp 
              | tech_id | 
              +----------+ 

En utilisant l'instruction SQL suivante je peux afficher la liste des commandes et le statut.

SELECT 
     Orders.id AS orderid, 
     Customers.name AS CLIENT, 
     Users.name AS rep, 
     Status.status 
    FROM 
     Orders 
    LEFT JOIN 
     Customers ON Orders.customer_id = Customers.id 
    LEFT JOIN 
     Users ON Orders.rep_id = Users.id 
    LEFT JOIN 
     Status ON Orders.id = Status.order_id 

je reçois quelque chose comme ça.

+---------+----------+-------+--------+ 
| orderid | CLIENT | rep | status | 
+---------+----------+-------+--------+ 
|  1 | Client 1 | Rep 1 | 1  | 
|  2 | Client 2 | Rep 2 | 1  | 
|  3 | Client 3 | Rep 1 | 1  | 
|  4 | Client 4 | Rep 2 | 1  | 
|  6 | Client 6 | Rep 4 | 1  | 
|  1 | Client 1 | Rep 3 | 4  | 
|  6 | Client 6 | Rep 4 | 4  | 
+---------+----------+-------+--------+ 

Je dois obtenir un enregistrement par ordre de commande en fonction de la date la plus récente dans la table d'état. Je sens que je suis si proche mais ne peux pas le comprendre.

+0

Voir https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what- semble-à-me-être-un-très-simple-sql-requête – Strawberry

+0

Cette question a été répondu de nombreuses fois. Voir la balise [tag: most-n-per-group]. –

Répondre

0

La façon la plus simple est probablement une sous-requête corrélative:

SELECT o.id AS orderid, c.name AS CLIENT, u.name AS rep, 
     (SELECT s.status 
     FROM status s 
     WHERE o.id = s.order_id 
     ORDER BY s.date DESC 
     LIMIT 1 
     ) latest_status 
FROM Orders o LEFT JOIN 
    Customers c 
    ON o.customer_id = c.id LEFT JOIN 
    Users u 
    ON o.rep_id = u.id ; 
+0

Merci. J'ai réussi à le faire fonctionner, j'ai juste dû changer de statut en Statut plusieurs fois. –