【发布时间】:2015-05-29 16:22:36
【问题描述】:
返回 a.id = 366 的预期 29 个结果的 SQL 查询
select a.name, c.name, MAX(B.date), MAX(b.renew_date) as MAXDATE
from boson_course c
inner join boson_coursedetail b on (c.id = b.course_id)
inner join boson_coursedetail_attendance d on (d.coursedetail_id = b.id)
inner join boson_employee a on (a.id = d.employee_id)
where a.id = 366
GROUP BY a.name, c.name
order by MAX(b.renew_date), MAX(b.date) desc;
下面的 SQL 代码返回 34 个结果,多个结果,其中两个不同的提供提供了相同的课程。我知道这些额外的结果是因为我将e.name 添加到要返回的列表中。但只需要包含最新日期和提供者名称的 29 个条目。
select a.name, c.name, e.name, MAX(B.date), MAX(b.renew_date) as MAXDATE
from boson_course c
inner join boson_coursedetail b on (c.id = b.course_id)
inner join boson_coursedetail_attendance d on (d.coursedetail_id = b.id)
inner join boson_employee a on (a.id = d.employee_id)
inner join boson_provider e on b.provider_id = e.id
where a.id = 366
GROUP BY a.name, c.name, e.name
order by MAX(b.renew_date), MAX(b.date) desc;
任何人都可以修改此代码以返回单个 DISTINCT 提供者名称,并为每门课程返回 MAX(renew_date)。
【问题讨论】:
-
我很困惑,因为在提供者的 id 上添加了提供者,假设 boson_provider.id 是主键,不应该添加任何新行。 boson_provider 表中是否有可能存在两个具有相同 id 的提供程序?
-
您想要
date与MAX(renew_date)或max(date)的行,这可能不同。与往常一样,您的 Postgres 版本应该在问题中。 -
Postgres 9.0 版
标签: sql postgresql greatest-n-per-group