2013-08-20 58 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?