首页  >  文章  >  数据库  >  如何在 MySQL 中使用聚合函数从分组行中检索第一条和最后一条记录?

如何在 MySQL 中使用聚合函数从分组行中检索第一条和最后一条记录?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-20 00:56:02365浏览

How to Retrieve the First and Last Records from Grouped Rows with Aggregate Functions in MySQL?

在 MySQL 中使用聚合函数从分组行中检索第一条和最后一条记录

在 SQL 中,聚合函数可以高效地汇总跨组的数据。然而,当遇到分组记录时,用户在检索每组的第一条和最后一条记录时可能会遇到挑战。在处理大型表时,这变得特别相关。

考虑以下查询:

SELECT MIN(low_price), MAX(high_price), open, close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

虽然此查询提供每个组的聚合统计信息(例如最低和最高价格),但它确实不提供每周的第一个和最后一个记录。为了满足这一需求,MySQL 提供了多种方法。

使用 GROUP_CONCAT 和 SUBSTRING_INDEX

一种有效的技术涉及利用 GROUP_CONCAT 和 SUBSTRING_INDEX 函数。 GROUP_CONCAT 连接组内的指定值,并用分隔符分隔。 SUBSTRING_INDEX 反过来从连接的字符串中提取子字符串。

以下是我们如何利用这些函数来实现我们想要的结果:

SUBSTRING_INDEX( GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1 ) AS open
SUBSTRING_INDEX( GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1 ) AS close 

这种方法消除了对昂贵的子查询的需要,并被证明是高度有效的对于此类特定场景非常有效。

有关 GROUP_CONCAT 和 SUBSTRING_INDEX 函数的进一步了解,请参阅官方 MySQL 文档。

以上是如何在 MySQL 中使用聚合函数从分组行中检索第一条和最后一条记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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