首页 >数据库 >mysql教程 >如何使用 SQL 高效检索给定记录 ID 的最新历史位置?

如何使用 SQL 高效检索给定记录 ID 的最新历史位置?

DDD
DDD原创
2024-12-07 04:46:12594浏览

How to Efficiently Retrieve the Most Recent Historic Location for a Given Record ID Using SQL?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn