2013-08-20 18 views
0

我需要选择多个学校中最大的,最近的或当前有效的学期,假设一所学校可能有多个同时学期(即一个学期那些荣誉学生已经注册,而另一些则没有荣誉)。还需要考虑到结束日期,因为荣誉学期可能有相同的开始日期,但可能是一年而不是一个学期,我想要这个学期。最大的n组,最大的多个标准

代码看起来是这样的:

SELECT t.school_id, t.term_id, COUNT(s.id) AS size, t.start_date, t.end_date 
FROM term t 
INNER JOIN students s ON t.term_id = s.term_id 
WHERE t.school_id = (some school id) 
GROUP BY t.school_id, t.term_id 
ORDER BY t.start_date DESC, t.end_date ASC, size DESC LIMIT 1; 

这工作完全找到了目前最大或最近活跃的名词,但我希望能够消除WHERE t.school_id = (some school id)部分。

每个组的标准最大n可以很容易地选择最大或最近的术语,但我需要选择最快的术语,以最多的学生结束。

+1

你确定你的工作用PostgreSQL? –

回答

0

不知道我正确解释你的问题。如果您提供了包括主键和外键在内的表定义,会更容易。

如果你想the most recent term that ends soonest with the largest number of students每所学校,这可能做到这一点:

SELECT DISTINCT ON (t.school_id) 
     t.school_id, t.term_id, s.size, t.start_date, t.end_date 
FROM term t 
JOIN (
    SELECT term_id, COUNT(s.id) AS size 
    FROM students 
    GROUP BY term_id 
    ) s USING (term_id) 
ORDER BY t.school_id, t.start_date DESC, t.end_date, size DESC; 
在这个相关答案

更多解释DISTINCT ON
Select first row in each GROUP BY group?