2015-02-17 25 views
0

您好想使這兩個最大功能的工作,我的問題在哪裏出錯了?它不會返回任何錯誤,但只有我的WHERE語句中的最大值中的一個有效。下面是該查詢試圖使兩個最大功能的工作

SELECT g.studentid, g.blockcode, sb.subjectcode, sb.daystart,sb.block,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='$studentid' 
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; 
+0

您正在使用哪種RDBMS? – Barranka 2015-02-17 21:01:42

+0

你怎麼能只告訴其中一個最大的工作?你不會在結果中看到它們的價值。 – GolezTrol 2015-02-17 21:03:44

回答

0

本身執行

SELECT max(sy) from register 

。你得到了什麼?這是你期望的價值嗎?然後執行

SELECT max(sem) 
FROM register 
WHERE sy = (SELECT max(sy) from register) 

本身。你得到了什麼?這是你期望的價值嗎?如果它不是你所期望的,努力從第一個查詢編碼值:

SELECT max(sem) 
FROM register 
WHERE sy = 2015 

如果值現在是正確的,再有就是嵌套兩個查詢的問題。您沒有指定您正在使用的DBMS,但這不是我希望在任何商業或甚至流行的開源系統中看到的問題。

如果這個雙最大最大結構通常用於您的查詢,您可能需要創建一個計算列,名爲,哦,sysem定義爲sy * 10 + sem。這是假設sem是在1-4範圍內的非常小的值。其結果是這樣的:

sy sem sysem 
==== === ====== 
2014 1 20141 
2014 2 20142 
2014 3 20143 
2014 4 20144 
2015 1 20151 

然後你可以在查詢部分更改爲

AND rr.sysem = (SELECT max(sysem) 
       FROM register) 

這將是非常好的,如果sysem也被收錄。