首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL帮助:为每个学生选择最后3条评论?

SQL帮助:为每个学生选择最后3条评论?
EN

Stack Overflow用户
提问于 2009-07-06 16:32:21
回答 2查看 433关注 0票数 3

我有两个表来存储小学教室的学生数据:

Behavior_Log具有列student_id、comments、date Student_Roster具有列student_id、firstname、lastname

该数据库用于存储有关学生行为的日常评论,有时老师在给定的一天内对某个学生进行多条评论。

现在假设老师希望能够拉出每个学生的最后3条评论的列表,如下所示:

代码语言:javascript
复制
Jessica 7/1/09 talking
Jessica 7/1/09 passing notes
Jessica 5/3/09 absent
Ciboney 7/2/09 great participation
Ciboney 4/30/09 absent
Ciboney 2/22/09 great participation

整个类的...and等

单个SQL查询必须为每个学生返回一组注释,以消除教师为班级中的每个学生单独运行查询所需的大量人力资源。

我知道这听起来类似于SQL Statement Help - Select latest Order for each Customer,但我需要显示每个人的最后3个条目,我不知道如何从这里到那里。

谢谢你的建议!

EN

回答 2

Stack Overflow用户

发布于 2009-07-06 16:53:29

这是我博客中这篇文章的一个稍微修改过的解决方案:

代码语言:javascript
复制
SELECT  student_id, date, comment
FROM    (
        SELECT  student_id, date, comment, (@r := @r + 1) AS rn
        FROM    (
                SELECT  @_student_id:= -1
                ) vars,
                (
                SELECT  *
                FROM
                        behavior_log a
                ORDER BY
                        student_id, date DESC
                ) ao
        WHERE   CASE WHEN @_student_id <> student_id THEN @r := 0 ELSE 0 END IS NOT NULL
                AND (@_student_id := student_id) IS NOT NULL
        ) sc
JOIN    Student_Roster sr
ON      sr.student_id = sc.student_id
WHERE   rn <= 3
票数 2
EN

Stack Overflow用户

发布于 2009-07-06 21:18:58

一种不同的方法是使用group_concat函数和单个子选择以及对该子选择的限制。

代码语言:javascript
复制
select (
     select group_concat( concat( student, ', ', date,', ', comment ) separator '\n' )
       from Behavior_Log 
      where student_id = s.student_id
   group by student_id
      limit 3 )
  from Student_Roster s
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1087942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档