MYSQL - 为每条记录选择最近的日期(相关子查询)

MYSQL - Selecting the most recent date for each record (correlated subqueries)

我有一个 mysql 查询,我想在其中获取:

在一条记录中,每条记录都有一个车辆 ID。数据是从 2 个不同的 table 中获得的,同时在子查询中按车辆 ID 对它们进行分组。

SELECT 
r.vehicleCounter AS lastServiceCounter, 
vf.vehicleCounter AS currentCounter,
r.dateFinished,
r.type,
v.vehicleID
FROM vehicle AS v
LEFT JOIN (
        SELECT r.repairID,
        r.vehicleCounter,
        r.dateFinished,
        st.type,
        r.vehicleID
        FROM repair AS r
        INNER JOIN servicetype AS st 
        ON st.serviceTypeID = r.serviceTypeID

        WHERE st.type <> 'None' 
        AND r.dateFinished IN (
            SELECT MAX(dateFinished)
            FROM repair
            GROUP BY vehicleID
        )
   ) AS r  
   ON r.vehicleID = v.vehicleID
LEFT JOIN (
    SELECT vehicleCounter, vehicleID
    FROM vehiclefueling
    WHERE date IN(
        SELECT MAX(date)
        FROM vehicleFueling
        GROUP BY vehicleID
    )
) AS vf ON vf.vehicleID = v.vehicleID 

虽然 运行 这个查询我应该只有每个 ID 的记录,但目前查询返回相同的 ID,但记录的值不同(检查 ID 11):

我可以对主查询使用 GROUP BY vehicleID,但我想保留最新的值

我会使用相关子查询获取维修和加油 ID:

select v.*,
       (select r.repairId
        from repairs r
        where r.vehicleID = v.vehicleID
        order by r.datefinished desc
        limit 1
       ) as repairid,
       (select vh.vehiclefuelingId
        from vehiclefueling vh
        where vh.vehicleID = v.vehicleID
        order by vh.date desc
        limit 1
       ) as vehiclefuelingId
from vehicle v;

然后,您可以重新连接两个表以获取其他字段。

这应该会让您对如何解决问题有所了解。您的示例查询包含不直接适合您的问题的其他表和逻辑。