Php 获取每个ID的最后记录

Php 获取每个ID的最后记录,php,mysql,mariadb,groupwise-maximum,Php,Mysql,Mariadb,Groupwise Maximum,我有一个疑问: 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','1

我有一个疑问:

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的最后一个条目,而不考虑单个查询中的时间戳?

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

获取每个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():

聚合函数MAX()允许返回 记录集中的列。该函数可以应用于数字或数字 字母数字数据。例如,可以搜索 网上商店桌子上的昂贵商品


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

获取每个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():

聚合函数MAX()允许返回 记录集中的列。该函数可以应用于数字或数字 字母数字数据。例如,可以搜索 网上商店桌子上的昂贵商品


请看这是一个正在工作的sql提琴:请看这是一个正在工作的sql提琴:它只返回一个idTruck,而不是表中每个idTruck的最后一个。如果可能的话,我想在一个查询中获得我的where子句中所有id的最后一个条目。然后您只需按idTruck添加一个组,如下所示:
选择idTruck,MAX(Truck.Name)作为名称,时间戳,油,柴油,货物,Truck.notes作为来自trip INNER JOIN Truck USING(idTruck)的备注(‘2’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘11’、‘12’、‘13’、‘14’、‘15’、‘16’)按idTruck按名称分组,时间戳DESC
。等等。如果可以的话,我会更改我的答案。我接受你的答案,但对我的答案稍作更改:我把MAX(时间戳)放在瞧:向下投票,因为它不起作用。
GROUP BY
plus
MAX
将正确获取每个组的“最后一个”值,但它不会获取与该最大值对应的其余列。然后,您必须
连接回表,以获取与该最大值对应的其他列。请参见
[groupwise maximum]
我添加的标记。@Dadinaks-很抱歉对新手太苛刻了。您对
MAX()的评论
很好。但总体答案是一个常见的错误;我不能让它作为被接受和投票的答案。这只会返回一个idTruck,而不是表中每个idTruck的最后一个。如果可能,我希望在单个查询中获得我的where子句中所有id的最后一个条目。然后,您只需按idTruck添加一个组,如这:
选择idTruck,MAX(Truck.Name)作为名称、时间戳、油、柴油、货物、Truck.notes作为trip内部连接卡车使用(idTruck)的备注,其中idTruck位于('2'、'4'、'5'、'6'、'7'、'8'、'9'、'11'、'12'、'13'、'14'、'15'、'16')按idTruck ORDER按名称分组,timestamp DESC
。等等。如果可以的话,我会更改我的答案。我接受你的答案,只是稍微更改一下我的答案:I put MAX(timestamp)瞧:向下投票,因为它不起作用。
GROUP BY
plus
MAX
将正确获取每个组的“最后一个”值,但它不会获取与该最大值对应的其余列。然后,您必须
连接回表,以获取与该最大值对应的其他列。请参见
[groupwise maximum]
我添加的标签。@Dadinaks-很抱歉对新手太苛刻了。你对
MAX()
的评论很好。但总体答案是一个常见的错误;我不能让它成为被接受和被投票的答案。