在 Join 语句中使用 MAX Date 检索历史位置
在获取特定记录 ID 的历史位置时,用户遇到了性能问题,并且结果中出现重复条目。用户尝试通过连接多个表并按 receive_id 进行过滤来解决此问题,但未实现预期输出。
要解决此问题,建议修改查询如下:
SELECT t1.received_id , t1.transaction_id , t1.date_modified , l.location FROM transactions t1 JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record ON max_record.received_id = t1.received_id AND max_record.maxmodify = t1.date_modified JOIN locations l ON l.location_id = t1.location_id JOIN received r ON r.received_id = t1.received_id WHERE t1.received_id = '1782' ORDER BY t1.date_modified DESC
关键的更改涉及连接事务表两次:一次用于主查询,一次在子查询中查找每个 receive_id 的最大 date_modified 值。然后,该子查询用于过滤主查询并仅返回具有最新 date_modified 值的行。
此技术的核心封装在以下通用模式中:
SELECT x.* FROM my_table x JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y ON y.id = x.id AND y.max_thing = x.thing;
此方法有效地消除了重复条目,并提供了仅显示每个记录 ID 和位置的最新修改时间的预期结果。
以上是如何使用 SQL 高效检索给定记录 ID 的最新历史位置?的详细内容。更多信息请关注PHP中文网其他相关文章!