gpt4 book ai didi

mysql - 选择最后已知的作业,但仅适用于最新的人

转载 作者:行者123 更新时间:2023-11-29 13:42:43 24 4
gpt4 key购买 nike

我已经在这个表查找查询上工作了几个小时,我终于向 SO 寻求帮助。

共有三个表:

  • 计算机(ID 的 assetTag,有关计算机的其他信息)
  • student(身份证号为studentID,其他学生信息)
  • 作业(studentID、assetTag、issueDate)

这些显然使用像联结表这样的分配作为多对多链接:
学生<->作业<->计算机

我整理了一个查询来显示学生姓名列表以及他们最后的计算机作业。除了一个我无法理解的问题之外,该查询工作得很好。如果为学生 A 分配了 10000 台计算机,然后将其上交,然后将该计算机分配给学生 B,直到学生 B 于年底上交计算机,则查找该 Assets 会显示两个学生都是该计算机的合法所有者。我需要它只显示最新的学生。

当前查询:

SELECT SQL_CALC_FOUND_ROWS s.studentID, s.lName, s.fName, s.uName, s.grade, c.assetTag, c.location, c.`status`  FROM student s 
INNER JOIN
(
SELECT studentID, MAX(issueDate) MaxDate
FROM assignment GROUP BY studentID
) MaxDates ON s.studentID = MaxDates.studentID AND s.active = 1
INNER JOIN assignment a ON MaxDates.studentID = a.studentID AND MaxDates.MaxDate = a.issueDate AND a.loaner = 0
INNER JOIN computer c ON a.assetTag = c.assetTag

大多数情况下,计算机的先前所有者都处于非事件状态 (s.active = 0),因此不会有太多重复项,但不应该有任何重复的 assetTags。

我希望我可以根据最后一次分配来聚合 assetTags。

任何帮助将不胜感激,因为我需要很快完成这项工作。

编辑:如果我解释一下,许多学生对应许多计算机,许多计算机对应许多学生,这可能会有所帮助。

全年中,学生可能会反复更换计算机,并且计算机可能会反复更换给不同的学生。

最佳答案

您的子查询可能如下所示:

SELECT studentID, issueDate MaxDate
FROM assignment
GROUP BY studentID
HAVING issueDate = max(issueDate)

这将返回包含每个学生最近作业的学生 ID 列表。

作为替代方案,您可以将整个困惑的查询替换为:

select SQL_CALC_FOUND_ROWS s.studentID, s.lName, s.fName, s.uName, s.grade, c.assetTag, c.location, c.`status`, a.issueDate
from assignment a
inner join student s on a.studentID = s.studentID
inner join computer c on a.assetTag = c.assetTag
group by a.assetTag
having a.issueDate = max(a.issueDate)

更新,因为 having 不能像这样工作:

select SQL_CALC_FOUND_ROWS s.studentID, s.lName, s.fName, s.uName, s.grade, c.assetTag, c.location, c.`status`, a.issueDate 
from assignment a
inner join student s on a.studentID = s.studentID
inner join computer c on a.assetTag = c.assetTag
where a.issueDate = (select max(issueDate) from assignment where assetTag=a.assetTag)
group by a.assetTag

关于mysql - 选择最后已知的作业,但仅适用于最新的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com