2017-10-10 103 views
0

我目前有4个表,我查询列出订单状态。 表与相关领域像这样在左连接查询中获取每个时间戳的最新记录

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

使用下面的SQL我可以显示订单和状态的列表。

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

我需要根据状态表上最近的日期得到一个每个orderid的记录。我觉得我很亲密,但无法弄清楚。

+0

见https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-似乎对我来说是一个非常简单的SQL查询 – Strawberry

+0

这个问题已经被回答了很多次。查看[tag:most-n-per-group]标签。 –

回答

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

谢谢。我能够得到它的工作,只需将状态更改为状态几次。 –

相关问题