MySQL:从加入的 table 中获取每个最新条目

MySQL: get each latest entry from joined table

我正在尝试为 Items 建立一个数据库(下面的SQLFiddle)(可以是任何类型的机器,在这个例子中是汽车和自行车)可能必须在给定的时间间隔内针对一个或多个CheckTypes进行检查。

一个Item有多个ItemsCheckTypes:

一个Check属于一个CheckType并且有多个ItemsChecks:

我现在想要的是找出上次的查询,每个都检查了Item其中 ItemsCheckTypes。 预期的结果是这样的:

Items.id | CheckTypes.id | LAST CHECK.date | LAST CHECK.id
1        | 1             | 2018-01-01      | 4
1        | 2             | 2017-08-01      | 3
2        | 1             | 2016-01-01      | 1

我尝试了很多 JOINS、子查询和其他方法,试图弄清楚哪个 table 是我的起点(我正在考虑 ItemsChecksItems)- 但正确现在我只是不知道这是否可能,或者我是否应该执行以下操作之一来(希望)简化它:

在应用程序级别,我使用的是 CakePHP 3.x,但我怀疑 Cake 解决方案是否比 SQL 解决方案更容易。 模型关联看起来很好,其他一切都按预期工作。

最后 SQL-Fiddle: http://sqlfiddle.com/#!9/b3d1f8/17

感谢任何帮助或建议,我不知道该走哪条路...

item_idcheck_type_id 对支票进行分组并获取最新日期:

select
    ic.item_id, 
    c.check_type_id, 
    max(c.date) latest
from items_checks ic
inner join checks c on c.id = ic.check_id
group by 
    ic.item_id, 
    c.check_type_id
;

check_id 仍然不见踪影。所以我们把前面的 select 和 table checks 结合起来得到它。

select
    c2.item_id,
    c2.check_type_id,
    c2.latest last_check,
    c1.id check_id
from checks c1
inner join (
    select ic.item_id, c.check_type_id, max(c.date) latest
    from items_checks ic
    inner join checks c on c.id = ic.check_id
    group by ic.item_id, c.check_type_id
) c2 on c2.check_type_id = c1.check_type_id and c2.latest = c1.date
order by
    c2.item_id,
    c2.check_type_id
;