当前位置: 首页 > 面试题库 >

如何在具有聚合函数的MySQL查询中获取分组记录的第一条记录和最后一条记录?

公西承
2023-03-14
问题内容

我正在尝试获取“分组”记录的第一条记录和最后一条记录。
更准确地说,我正在执行这样的查询

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

但我想获得小组的第一和最后的记录。可以通过执行大量请求来完成,但是我的桌子很大。

是否有使用MySQL的方法(如果可能的话,可以减少处理时间)?


问题答案:

您要使用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

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

请查阅手册中的两个函数以了解它们的参数,或访问本文,其中包含有关如何在MySQL中进行时间框架转换的示例,以获取更多说明。



 类似资料:
  • 问题内容: 如标题所示,我想选择以分组的每组行的第一行和最后一行。 我在此表中包含以下数据: 我需要获取的是列开头的第一个值和列末尾的最后一个值,并按group by group列进行分组。 结果表应如下所示: 我使用和和进行了查询。它可以在SQL Server 2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。 问题答案:

  • 问题内容: 我正在使用mysql并遇到一些问题。我想检索插入的最后一行。 <<以下是详细>> 以下是我创建表格的方式。 我在其中插入了四个值,如下所示 当我执行时,我得到如下输出 当我尝试下面的代码时, 我得到如下输出。 但是,当我使用代码时,出现错误 使用时,表中没有任何数据。 链接以播放数据 注意: 这里我使用4只是为了获得所需的输出。稍后我可以从查询中获取 如果我只想查看最后一条记录,请建议

  • 问题内容: 桌子: 查询: 结果: 问题: 如何重写查询,使其返回post_id-> 83而不是post_id-> 81? 他们都有相同的论坛ID和主题ID,但是post_id-> 81的日期早于post_id-> 83。 但是,Group By似乎获得了“第一”记录,而不是“最新”记录。 我尝试将查询更改为 但这同时返回post_id 81和83 问题答案: 如果选择在group子句中未使用且不

  • 问题内容: 我需要从下面给出的表中获取每个重复记录集的第一行。我需要在视图中使用此查询 请不要使用临时表,因为我已经通过添加标识列和最小函数以及分组依据来完成了。我需要没有临时表或表变量的解决方案 这只是示例数据。原始表中有1000条记录,我只需要前1000条的结果,因此不能使用 不同的 我正在使用SQL Server 2005 谢谢。 问题答案: 答案具体取决于您所说的“前1000个不同”记录的

  • 问题内容: 有一个包含数据的表,如下所示: 如果我运行查询,我将得到的结果为: 什么查询将返回以下结果? 即,应返回每个组中的最后一条记录。 目前,这是我使用的查询: 但这看起来效率很低。还有其他方法可以达到相同的结果吗? 问题答案: MySQL 8.0现在支持窗口功能,就像几乎所有流行的SQL实现一样。使用这种标准语法,我们可以编写每组最多n个查询: 以下是我在2009年为此问题写的原始答案:

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: SQL Server:只有GROUP BY中的最后一个条目 我有一个这样的表: 我使用以下查询: 以上查询的结果: 在结果组上方按名称排列行,但显示每个组的第一行。我想从每个组中选择最后一行(按ID)。 例如: 如何编写以上结果的查询。 谢谢 问题答案: 甚至可能不再需要该组。