您想让这两个最大功能正常工作,我的查询出错了哪里?它不会返回任何错误,但只有我的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 :(得分: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,但这不是我期望在任何商业或甚至流行的开源系统中看到的问题。
如果您的查询中经常使用此双Max-of-a-Max结构,则可能需要创建一个名为oh 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也被索引,那将是非常好的。