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