如何使用聚合函数获取MySQL查询中分组记录的第一个和最后一个记录?

Jim*_*mmy 29 mysql aggregate-functions

我正在尝试获取"分组"记录的第一个和最后一个记录.
更确切地说,我正在做这样的查询

SELECT MIN(low_price), MAX(high_price), open, close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)
Run Code Online (Sandbox Code Playgroud)

但我想获得该组的第一个和最后一个记录.它可以通过做大量的请求完成,但我有一个非常大的表.

是否有一个(如果可能的话处理时间很短)用MySQL做这个的方法?

Joa*_*sta 52

你想使用GROUP_CONCATSUBSTRING_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 
Run Code Online (Sandbox Code Playgroud)

这避免了昂贵的子查询,我发现它通常对这个特定问题更有效.

查看两个函数的手册页以了解它们的参数,或者访问本文,其中包含如何在MySQL中进行时间帧转换以获得更多解释的示例.

  • 感谢狡猾的解决方案!不过,我发现MySQL不支持FIRST()和LAST(),这会比这快得多...... (3认同)
  • 文章挂了。 (2认同)