gpt4 book ai didi

sql - 为每个学生选择*最新*成绩信息

转载 作者:行者123 更新时间:2023-11-29 11:34:44 28 4
gpt4 key购买 nike

我有两个表:

STUDENT        GRADES
---------- ----------
id id
name person_id
address date
city test_name
phone grade

每个学生在成绩表中都有多个条目。我想知道是否可以使用 SQL (Postgres) 选择所有学生及其最新成绩信息。我基本上想要一个如下所示的结果表,其中 date、test_name 和 grade 是最新结果(按日期)。

LATEST_GRADES
----------------
id
name
address
city
phone
grade_id
date
test_name
grade

非常感谢任何帮助,谢谢。

编辑:添加解决方案查询

SELECT * FROM
students s
JOIN (SELECT DISTINCT ON (person_id) person_id, date, test_name, grade
FROM grades
ORDER BY person_id, date DESC) g
ON s.id = g.person_id;

最佳答案

我认为 Postgre 支持窗口函数,所以你应该可以做类似的事情

SELECT *
FROM person p
JOIN grades g ON grades.person_id = p.id
WHERE row_number() OVER (PARTITION BY g.person_id ORDER BY g.date DESC) = 1

编辑:显然 where 子句不支持窗口函数(应该知道这一点,因为它有意义)。然而,这并不是一个无法解决的问题:

SELECT *
FROM person p
JOIN (SELECT person_id, <other_fields>, row_number() OVER (PARTITION BY person_id ORDER BY date DESC) AS rn FROM grades) g
WHERE g.rn = 1

不过,如果您的数据很大,请检查执行计划。

关于sql - 为每个学生选择*最新*成绩信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150926/

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