首页  >  文章  >  数据库  >  如何从 MySQL 分组数据中检索第一条和最后一条记录?

如何从 MySQL 分组数据中检索第一条和最后一条记录?

DDD
DDD原创
2024-11-08 19:16:021047浏览

How to Retrieve First and Last Records from Grouped Data in MySQL?

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

在 MySQL 中处理分组数据时,可能需要访问每组中的第一个和最后一个记录。例如,考虑以下查询:

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

此查询检索一年中每周的最低低价、最高最高价、开盘价和收盘价。但是,如果目标是获取每组的第一条和最后一条记录,则上述查询是不够的。

解决方案

要实现这一点,可以利用GROUP_CONCAT 和 SUBSTRING_INDEX 函数。以下查询修改原始查询以包含第一个和最后一个开盘价的列:

SELECT MIN(low_price), MAX(high_price),
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
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

说明

  • GROUP_CONCAT:连接每个组内的指定列(例如,打开),由逗号。
  • SUBSTRING_INDEX:提取指定的分隔符(在本例中为逗号)之前或之后的子字符串。

通过使用这些函数,查询可以有效地检索每组的首次开盘价和最后收盘价。这种方法避免了对多个子查询的需要,并提供了用于检索所需数据的高性能解决方案。

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

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