在连接语句中选择最近的日期:历史位置数据检索故障排除
此查询旨在检索记录的历史位置和他们对应的日期。然而,当前的实现需要很长的时间来执行并产生重复的记录。预期输出是一个简化的记录列表及其最近位置。
原始查询尝试通过执行自连接操作来查找与每个记录 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
解释
在此查询中,我们引入一个公共表表达式(CTE)来查找 transactions 表中每个记录 id 的最大日期。 CTE 为:
SELECT received_id, MAX(date_modified) AS maxmodify FROM transactions GROUP BY received_id
然后,我们将原始交易表 (t1) 与 receive_id 字段上的 CTE (max_record) 连接起来。此外,我们还对 maxmodify 列进行筛选,以确保仅包含最新日期的交易。这通过避免不必要的连接和重复来优化查询。
通过这个优化的查询,我们可以有效地获取每条记录的历史位置,确保我们只检索每个唯一记录 ID 的最新位置。
以上是如何高效地检索连接语句中每条记录的最新位置数据?的详细内容。更多信息请关注PHP中文网其他相关文章!