2015-02-09 57 views
0

最大疑問我想知道如何在查詢中使用兩個最大的功能,我有這個疑問選擇兩個在SQL

SELECT g.studentid, g.blockcode, sb.subjectcode, sb.daystart, sb.dayend, sb.stime, sb.sday, ii.firstname instructorname, ii.lastname instructorlastname, sb.roomcode, r.building, d.description, rr.studentid,rr.sem, rr.sy 
      FROM grades g 

      JOIN subjectblocking sb ON g.blockcode=sb.blockcode 
      JOIN instructorinfo ii ON sb.instructorid=ii.instructorid 
      JOIN subjects d ON sb.subjectcode = d.subjectcode 
      JOIN room r ON sb.roomcode=r.roomcode 
      JOIN register rr ON rr.studentid=g.studentid 
      WHERE g.studentid='2011-S1308' 
      AND rr.sem=(SELECT max(sem) from register 
      WHERE sy= (SELECT max(sy) from register)) 
      ORDER BY sb.daystart ASC, sb.stime like '%AM%' DESC; 

爲什麼我用了兩個最大,因爲我想這兩個學期和學年的原因最大值,以便學生可以查看他們的時間安排,瞭解當前的情況。我應該如何同時增加他們的時間?此外,我的查詢中的問題是,只有1最大工作,最大(sem)。先謝謝你!

+0

您可能需要一個條件才能選擇外表的studentid或某物,以選擇「當前學生」的最大值。 – jarlh 2015-02-09 11:05:29

回答

0

你需要的是使用

MAX(your_column) OVER (PARTITION BY semester_column) max_by_semester 
MAX(your_column) OVER (PARTITION BY year_column) max_by_year 

這樣,您將獲得由PARTITION BY子句選擇列的值來選擇你的數據的分區上的最大值。

以這種方式使用MAX不是一個聚合函數,而是一個窗口函數,行爲是完全不同的,你不需要Group By

您可以找到更多關於窗口功能here的信息。

0

爲了您的查詢工作,您需要組合的最大值sy/sem,而不是單獨。我認爲查詢如下所示:

SELECT g.studentid, g.blockcode, sb.subjectcode, sb.daystart, sb.dayend, sb.stime, sb.sday, 
     ii.firstname instructorname, ii.lastname instructorlastname, 
     sb.roomcode, r.building, d.description, rr.studentid, rr.sem, rr.sy 
FROM grades g JOIN 
    subjectblocking sb 
    ON g.blockcode = sb.blockcode JOIN 
    instructorinfo ii 
    ON sb.instructorid = ii.instructorid JOIN 
    subjects d 
    ON sb.subjectcode = d.subjectcode JOIN 
    room r 
    ON sb.roomcode = r.roomcode JOIN 
    register rr 
    ON rr.studentid = g.studentid 
WHERE g.studentid = '2011-S1308' AND 
     (sy, rr.sem) = (select sy, sem from register order by sy desc, sem desc limit 1) 
ORDER BY sb.daystart ASC, sb.stime like '%AM%' DESC; 
+0

你怎麼沒有使用最大功能? – 2015-02-09 11:55:33

+0

@NattyGuurl。 。 。因爲我不認爲你需要單列的最大值。你想要在最近一年的最近一個學期,這就是爲什麼這個查詢使用'按順序排序,sem desc'。 – 2015-02-09 21:48:28