获取每个 ID 的最后一条记录

Posted

技术标签:

【中文标题】获取每个 ID 的最后一条记录【英文标题】:Get last record of each ID 【发布时间】:2020-10-01 00:02:56 【问题描述】:

我有这个问题:

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 的最后一个条目?

【问题讨论】:

见meta.***.com/questions/333952/… dev.mysql.com/doc/refman/8.0/en/… 这是一个有效的 sql 小提琴:sqlfiddle.com/#!9/820325/1 【参考方案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() 允许返回 a 的最大值 记录集中的列。该函数可以应用于数字或 字母数字数据。例如,可以搜索最 网上商店桌子上的昂贵产品。

【讨论】:

这只会带回一个 idTruck 而不是表中每个 idTruck 的最后一个。如果可能,我想在单个查询中获取 where 子句中所有 id 的最后一个条目。 那么您只需要像这样添加 GROUP BY idTruckSELECT idTruck, 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 。等待。如果可以,我会更改答案。 我接受了你的回答,但我稍作改动:我输入了 MAX(timestamp) 和瞧: 投反对票,因为它不起作用GROUP BY 加上 MAX 将正确获取每个组的“最后一个”值,但它不会获取对应于该最大值的其余列。然后,您必须 JOIN 返回表以获取对应于最大值的其他列。请参阅我添加的[groupwise-maximum] 标签。 @Dadinaks - 很抱歉对新手很苛刻。您关于MAX() 的cmets 很好。但总体答案是一个常见的错误;我不能让它成为被接受和赞成的答案。

以上是关于获取每个 ID 的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

获取每个月最后一条记录的值(Django)

如何在多条记录插入中获取最后插入的 id?

如何以最快的方式获取给定 id 的最后一条记录? (微软 SQL)

使用 INNER JOIN 获取最后一条记录

获取表中存在的每个日期的第一条和最后一条记录号

MYSQL中获取得最后一条记录的语句