根据上次日期选择行

新手上路,请多包涵

我在 Postgres 数据库中有一个名为 Course 的表:

表 Course 的示例数据

如何选择具有最新日期的课程名称的行?我的意思是,如果我的一个 ID 有两个相同的课程名称,我应该只显示最新的一个作为下面的结果。

简单地说,我只想显示每个(“ID”,“课程名称”)的最新行。

期望的结果

And what if I have two date columns in table Course , which are StartDate & EndDate and I want to show the same based on EndDate 只有?

原文由 Aan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 473
2 个回答

在 PostgreSQL 中,要 _为一组定义的列获取唯一行_,首选技术通常是 DISTINCT ON

 SELECT DISTINCT ON ("ID") *
FROM   "Course"
ORDER  BY "ID", "Course Date" DESC NULLS LAST, "Course Name";

假设您实际上使用带有空格的那些不幸的大写标识符。

这样,您每 ID 恰好得到一行- 具有最新已知 "Course Date" 和第一个 "Course Name" 的行(根据排序顺序)日期。

您可以删除 NULLS LAST 如果您的列已定义 NOT NULL

要获得每个 ("ID", "Course Name") 的唯一行:

 SELECT DISTINCT ON ("ID", "Course Name") *
FROM   "Course"
ORDER  BY "ID", "Course Name", "Course Date" DESC NULLS LAST;

此相关答案中的详细信息:

原文由 Erwin Brandstetter 发布,翻译遵循 CC BY-SA 4.0 许可协议

SELECT "ID", "Course Name", MAX("Course Date") FROM "Course" GROUP BY "ID", "Course Name"

原文由 Maxim Krizhanovsky 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进