获取每组具有最高/最小值的记录
问题:
检索记录每个字段中给定字段的最高或最小值
之前提出的解决方案:
在带有子查询的复杂查询中使用排名(@rank := @rank 1)。
替代解决方案:
更有效的方法是利用左外不带排名变量的连接:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
此查询通过利用 (GroupId, OrderField) 上的索引策略来优化对 t2 的访问,从而达到预期结果。
优化注意事项:
AND (t1.OrderField < t2.OrderField OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
左外连接的优点做法:
以上是如何在SQL中高效检索每组最高或最低值的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!