Postgres SQL按最近日期选择两个字段,其中一个字段必须唯一
我需要找到哪个学生属于哪个教室,根据输入的最新数据 从这个数据集开始:Postgres SQL按最近日期选择两个字段,其中一个字段必须唯一,sql,postgresql,Sql,Postgresql,我需要找到哪个学生属于哪个教室,根据输入的最新数据 从这个数据集开始: student homeroom date Alice 200 2020-02-25 Alice 100 2019-09-16 Bob 100 2019-10-20 Bob 100 2020-02-01 我只想检索Alice的最近一次家庭会议室和Bob的最近一次家庭会议室: student homeroom date Ali
student homeroom date
Alice 200 2020-02-25
Alice 100 2019-09-16
Bob 100 2019-10-20
Bob 100 2020-02-01
我只想检索Alice的最近一次家庭会议室和Bob的最近一次家庭会议室:
student homeroom date
Alice 200 2020-02-25
Bob 100 2020-02-01
如何查找最新记录的典型答案仅适用于查找一个字段的最近性时:
SELECT
student, homeroom, MAX(date::date) AS date
FROM
homeroom
GROUP BY
student, homeroom
这不是我想要的:
student homeroom date
Alice 200 2020-02-25
Alice 100 2019-09-16
Bob 100 2020-02-01
您可以在上使用:
select distinct on (student) hr.*
from homeroom hr
order by student, date desc;
distinct on
是一个非常方便的Postgres扩展。它在第行返回列表中的键。该行基于排序依据中的排序标准。您可以使用
select distinct on (student) hr.*
from homeroom hr
order by student, date desc;
distinct on
是一个非常方便的Postgres扩展。它在第行返回列表中的键。该行基于排序依据中的排序标准。您可以使用行编号()
您可以使用row\u number()
我认为窗口表达式中的排序依据应该是“date desc”。您的函数将返回Alice,1002019-09-16,这是错误的。我相信窗口表达式中的order by
应该只是“date desc”。您的函数将返回错误的Alice,1002019-09-16。