获取具有最新相关元素的10条记录

时间:2017-10-11 14:36:50

标签: sql postgresql greatest-n-per-group

我有两个表:agencieslessons

  • 一个机构可以上很多课程。
  • 课程属于唯一一个代理机构。
  • 课程有约会。

我想让10个代理商(或他们的ID)获得最新课程。换句话说,我希望通过他们的课程订购的代理商仅限于10个代理商。

我尝试了order bygroup by的各种查询但是我被卡住了。我试图写的一切都是荒谬的。这是我尝试的第一件事:

SELECT
  agency_id
FROM lessons
GROUP BY agency_id
ORDER BY start_at;

失败是因为:

  

列“lessons.start_at”必须出现在GROUP BY子句中或用于聚合函数

我想我理解为什么。但我迷路了,我不知道如何解决这个问题。我应该从哪里开始?

1 个答案:

答案 0 :(得分:4)

order by和选择列表项必须是group by子句或聚合函数的一部分。您可以根据最大(即最后一次)课程日期进行排序:

SELECT   agency_id
FROM     lessons
GROUP BY agency_id
ORDER BY MAX(start_at) DESC
LIMIT    10