从 MySQL 中的分组结果中检索第一条和最后一条记录
在 MySQL 中,从分组结果集中获取第一条和最后一条记录,同时应用聚合函数可能具有挑战性。考虑以下查询:
SELECT MIN(low_price), MAX(high_price), open, close FROM symbols WHERE date BETWEEN (.. ..) GROUP BY YEARWEEK(date)
此查询按周对数据进行分组,并计算每周的最低低价、最高最高价、开盘价和收盘价。但是,它不提供每个组中的第一个和最后一个记录。
要实现此目的,一种方法是使用 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
此解决方案允许您连接每个组的所有打开值和关闭值,以逗号分隔,然后使用 SUBSTRING_INDEX 提取第一个和最后一个值。这种方法避免了昂贵的子查询,并且可以更有效地解决这个特定问题。
有关 GROUP_CONCAT 和 SUBSTRING_INDEX 函数的更多信息,请参阅 MySQL 文档。此外,您还可以探索其他选项,例如使用窗口函数或用户定义的函数,具体取决于查询的具体要求。
以上是如何从 MySQL 分组结果中检索第一条和最后一条记录?的详细内容。更多信息请关注PHP中文网其他相关文章!