📅  最后修改于: 2023-12-03 15:18:38.442000             🧑  作者: Mango
在 PostgreSQL 中,DISTINCT ON 可以根据指定的表达式在查询结果中去重。这在需要查找特定字段最新值的场景下非常有用。
SELECT DISTINCT ON (expression) column1, column2, ...
FROM table_name
WHERE condition
ORDER BY expression, column1, column2, ...;
假设我们有一个存储学生成绩的表,包含学号、科目、成绩和日期四个字段。现在我们要查询每个科目中最新的成绩。
我们可以使用以下 SQL 语句:
SELECT DISTINCT ON (subject) subject, score, date
FROM grades
ORDER BY subject, date DESC;
这个语句将返回每个科目中最新的成绩记录,并按照科目名称和日期排序。如果我们只想获取某个学生的最新成绩,可以添加 WHERE 子句。
SELECT DISTINCT ON (subject) subject, score, date
FROM grades
WHERE student_id = '123456'
ORDER BY subject, date DESC;
总之,DISTINCT ON 是一个非常实用的 PostgreSQL 特性,在处理需要获取最新记录的场景下非常有用。