试图使两个最大函数工作
Trying to make two max function work
您好,我想让这两个 max 函数起作用,我的查询哪里出错了?它不会 return 任何错误,但只有我的 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;
执行
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 也被索引,那就太好了。
您好,我想让这两个 max 函数起作用,我的查询哪里出错了?它不会 return 任何错误,但只有我的 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;
执行
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 也被索引,那就太好了。