【问题标题】:Trying to select the max column school-year试图选择最大列学年
【发布时间】:2020-02-01 13:54:59
【问题描述】:

我正在尝试关注this question.的答案

但是它对我不起作用,我不明白为什么。

SELECT h.*
FROM `student-history` h
LEFT OUTER JOIN `student-history` h2 ON h.id = h2.id AND h.`school-year` < h2.`school-year`
WHERE 
h2.id IS NULL

我的 SQL 与 Adrian 在他的回答中的几乎完全相同,但它没有产生相同的结果。基本上student-history 表有一个名为school-yeartinyint(1) 列,通常是1-3 之间的数字。每个用户可以有多个条目。所以我想找到最高的年份行。

我不完全理解他的回答,所以我真的无法继续下去,但如果有人能帮助我了解我哪里出错了,那就太好了。

如果我在上述语句中添加WHERE 子句以按用户缩小范围,例如AND h.userID = 54,我仍然会得到三行学生在场的所有三年。 LEFT OUTER JOIN 似乎根本没有什么不同。

我创建了an SQL Fiddle here.

【问题讨论】:

  • 请在您的问题中提出需要提出的问题,而不仅仅是链接。这包括minimal reproducible example。请提出 1 个具体问题。这里要确定的各种问题是常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。如果您发布问题,请使用一个措辞作为标题。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)的 SQL,并以表格式作为代码输入。 How to Ask暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。

标签: mysql sql left-join greatest-n-per-group sql-null


【解决方案1】:

您应该加入 userID 而不是 id。除此之外,您的查询很好。

SELECT h.*
FROM `student-history` h
LEFT OUTER JOIN `student-history` h2 ON h.userID = h2.userID AND h.`school-year` < h2.`school-year`
WHERE 
h2.id IS NULL

【讨论】:

  • 哇!你能解释为什么这会有所不同吗?在我引用的答案中,他们加入了 ID?
  • 我现在在原始问题中看到 ID 不是唯一的。所以现在说得通了。好的,谢谢你的帮助!
  • LEFT JOIN 的想法是检查同一学生是否没有其他记录具有最高的school-year...并且学生由他们的userID 标识。
猜你喜欢
  • 2022-10-04
  • 1970-01-01
  • 2019-05-02
  • 2022-01-17
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多