[英]Selecting two max queries in sql
我想知道如何在查询中使用两个max函数,我有这个查询
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个max有效,即max(sem)。 先感谢您!
您需要使用
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值。
以这种方式使用MAX并不是一个聚合函数,而是一个窗口函数,其行为完全不同,您不需要Group By
。
您可以在此处找到有关Window功能的更多信息。
为了使查询正常工作,您需要最大的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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.