2017-10-10 9 views
0

私は現在、4つのテーブルを持っています。関連分野での テーブルは、私が注文とステータスのリストを表示することができ、次のSQLを使用して、この左の結合クエリでタイムスタンプごとに最新のレコードを取得

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

のように見えます。

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 

このようなものがあります。

+---------+----------+-------+--------+ 
| 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  | 
+---------+----------+-------+--------+ 

ステータステーブルの最新の日付に基づいて、オーダーIDごとに1レコードを取得する必要があります。私は私がそれほど近くにいると感じるが、それを理解できないと感じている。

+0

はhttps://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-を参照してください。私にとっては非常にシンプルなSQLクエリです。 – Strawberry

+0

この質問は何度も回答されています。 [tag:グループごとの最大値]タグを参照してください。 –

答えて

0

最も簡単な方法は、おそらく相関サブクエリです:

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

ありがとうございます。私はそれを働かせることができた、ちょうど状態にステータスを数回変えなければならなかった。 –

関連する問題