简体   繁体   English

mysql连接4个表,最后一个多个group by和where类

[英]mysql join 4 tables with last multiple group by and where class

I have database for delivery of items to customers. 我有用于将项目交付给客户的数据库。 for this i have 4 tables, delivery_logs, delivery,driver,customer 为此,我有4个表,delivery_logs,delivery,driver,customer

(we have delivery log table cause some time one delivery have many entries like not delivered & other driver take delivery etc) (我们有交付日志表,因为一段时间内一次交付有很多条目,例如未交付和其他驱动程序接受交付等)

delivery_log

id delivery_id driver_id  message     date_added
1  1           1         OK         2016-09-13 17:38:15 
2  2           2         OK         2016-09-13 17:35:18 
3  1           1         Not OK     2016-09-13 17:33:10     
4  1           3         OK         2016-09-13 17:32:13 
5  2           4         waiting    2016-09-13 17:20:11 


delivery
delivery_id  customer_id name          status
1            1           delivery 1    done
2            1           delivery 2    done
3            2           delivery 3    done


driver
driver_id  name
1          driver1
2          driver2
3          driver3

customer
customer_id  first_name   last_name
1            name1          other name1
2            name2          other name2
3            name3          other name3
4            name3          other name4

now i want to have query of 现在我想查询

last 1 record (order by date_added) from delivery_log 交货日志中的最后1条记录(按日期添加的顺序)

for each delivery by each driver 每个司机的每次送货

where delivery= done 交货=完成

and i want to have bellow fields 我想拥有风箱

delivery_log.delivery_id  delivery_log.driver_id delivery_log.message date_added 
delivery.name driver.name 
customer.first_name customer.last_name

i have tried many inner join and join options but nothing seems to be working, some time it did't take last record & some time it mix (wrong) the delivery or driver name. 我尝试了许多内部联接和联接选项,但似乎没有任何效果,有一段时间没有上次记录,有一段时间混合(错误)交货或驱动程序名称。

Thanks for all help. 感谢您的所有帮助。

You can use NOT EXISTS() and JOIN : 您可以使用NOT EXISTS()JOIN

SELECT 
    dl.*,
    del.name,
    dr.name,
    c.first_name,
    c.last_name
FROM delivery_log dl
JOIN delivery del 
 ON(dl.delivery_id = del.delivery_id)
JOIN driver dr 
 ON(dr.driver_id = dl.driver_id)
JOIN customer c 
 ON(del.customer_id = c.customer_id)
WHERE del.status IN('DONE','OK')
  AND NOT EXISTS(SELECT 1 FROM delivery_log s
                 WHERE s.delivery_id = dl.delivery_id
                   AND s.driver_id = dl.driver_id
                   AND s.date_added > dl.date_added)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM