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。