【发布时间】:2019-09-15 01:24:44
【问题描述】:
我有 2 张桌子:
表 1:
| jobid | jobname |
| 1 | job a |
| 2 | job b |
表 2:
| id | jobid | statusid | statusdate | desc |
| 1 | 1 | 100 | 2019.04.25 10:00:00 | first |
| 2 | 2 | 100 | 2019.04.25 11:00:00 | first |
| 3 | 2 | 100 | 2019.04.25 12:00:00 | second |
table2 中的作业可以有多个相同的“statusid”,但不同的“statusdate”和“desc”
我需要像这样获取最后一个“statusid”= 100 的工作列表:
| 1 | job a | 1 | 1 | 100 | 2019.04.25 10:00:00 | first |
| 2 | job b | 3 | 2 | 100 | 2019.04.25 12:00:00 | second |
SELECT * FROM table1
INNER JOIN table2 ON table1.id = table2.jobid
GROUP BY table1.id
此查询返回错误结果,例如:
| 1 | job a | 1 | 1 | | 100 | 2019.04.25 10:00:00 | first |
| 2 | job b | 3 | 2 | 2 | 100 | 2019.04.25 11:00:00 | first |
【问题讨论】:
-
"此查询返回错误结果,如:" 是的,这是因为 "SQL-92 及更早版本不允许选择列表、HAVING 条件或ORDER BY 列表指的是未在 GROUP BY 子句中命名的非聚合列。” 请参阅 manual .. 所以你的 SQL
SELECT * .. GROUP BY table1.id很可能是无效的 SQL,除非 MySQL 可以使用 functionally dependent 来获得正确的不在分组依据中的每个选定列的数据 -
但 MySQL 总是扩展
GROUP BY功能并允许无效的GROUP BY查询,代价是对于未在 GROUP BY 中命名的每个选定列的无效(与组无关)数据 -
应该如何处理领带,这会发生什么?
-
谢谢,对于答案,我会阅读手册。我每个工作只需要 1 条记录
-
“我每个工作只需要 1 条记录” 是的,是哪一个?我假设这些表有带有 AUTO_INCREMENT 选项的列,如果两个 statusdate 相同,我们可以使用它来排序获取最后一条记录?
标签: mysql mariadb groupwise-maximum