gpt4 book ai didi

mysql - 仅包含查询结果中的第一组和最后一组

转载 作者:行者123 更新时间:2023-11-29 22:13:39 25 4
gpt4 key购买 nike

给定架构

enter image description here

以下查询

SELECT a.user_id,
a.id,
a.date_created,
avg(ai.level) level
FROM assessment a
JOIN assessment_item ai ON a.id = ai.assessment_id
GROUP BY a.user_id, a.id;

返回这些结果

user_id, a.id, a.date_created,        level
1, 99, "2015-07-13 18:26:00", 4.0000
1, 98, "2015-07-13 19:04:58", 6.0000
13, 9, "2015-07-13 18:26:00", 2.0000
13, 11, "2015-07-13 19:04:58", 3.0000

我想更改查询,以便只为每个用户返回最早的结果。换句话说,应该返回以下内容

user_id, a.id, a.date_created,        level
1, 99, "2015-07-13 18:26:00", 4.0000
13, 9, "2015-07-13 18:26:00", 2.0000

我认为我需要添加一个 HAVING 子句,但我正在努力找出确切的语法。

最佳答案

我已经做过类似的事情,除了一个小差异,我想要每组前 5 个。使用案例用于报告 - 意味着运行查询/创建临时表的时间不是限制。

我的解决方案:

  • 创建一个新表,其中列为 id(对原始表的引用),并且 id 可以是唯一的/主要的
  • INSERT IGNORE INTO tbl1 (id) select min(id) fromoriginal_tbl where id not in (select id from tbl1) group by user_id
  • 根据需要重复步骤 2 多次(在我的例子中为 5 次)。新表 table 将仅包含您要显示的 id
  • 现在在 tbl1 上运行联接,原始表将为您提供所需的结果

注意:这可能不是最好的解决方案,但当我必须在周末 2-3 小时内分享报告时,这对我有用。我的数据大小约为 1M 条记录

关于mysql - 仅包含查询结果中的第一组和最后一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31391637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com