提问者:小点点

获取每个ID的最后记录


我有这样的疑问:

SELECT  Truck.Name AS name,
        timestamp,
        oil,
        diesel,
        cargo,
        Truck.notes AS Remarks

        FROM trip
        INNER JOIN Truck USING (idTruck)
        WHERE idTruck IN('2','4','5','6','7','8','9','11','12','13','14','15','16')
        ORDER BY name, timestamp DESC

它返回来自ID的所有记录我想使用CURDATE作为

AND DATE(timestamp) = CURDATE()

为了获得最后的记录,但是当一个记录一天没有被修改时(他们通常是这样做的,但有时情况并非如此),我会丢失这些记录。 我如何修改查询以获取每个idTruck的最后一个条目,而不考虑单个查询中的时间戳?


共1个答案

匿名用户

我建议您使用sql的MAX函数来获取最后一条记录(MAX(truck.name)):

SELECT  MAX(Truck.Name) AS name,
        timestamp,
        oil,
        diesel,
        cargo,
        Truck.notes AS Remarks

FROM trip
INNER JOIN Truck USING (idTruck)
WHERE idTruck IN('2','4','5','6','7','8','9','11','12','13','14','15','16')
ORDER BY name, timestamp DESC

获取每个ID的最后记录:

SELECT  MAX(Truck.Name) AS name,
        timestamp,
        oil,
        diesel,
        cargo,
        Truck.notes AS Remarks

FROM trip
INNER JOIN Truck USING (idTruck)
WHERE idTruck IN('2','4','5','6','7','8','9','11','12','13','14','15','16')
GROUP BY idTruck 
ORDER BY name, timestamp DESC

因为根据sql.sh(https://sql.sh/fonctions/agregation/max):

聚合函数MAX()允许返回记录集中某一列的最大值。 该函数可应用于数字或字母数字数据。 例如,可以在网店中搜索一张桌子中最贵的产品。