我有我的数据库中下表:获取行的最后一次出现在MySQL LEFT JOIN
USERS
+-------+-------------------------------------+
| id | name |
+-------+-------------------------------------+
| 1 | Johnny Appleseed |
| 2 | Pete Jones |
| 3 | John Doe |
| 4 | Jane Plick |
+-------+-------------------------------------+
报告]
+-------+-------+-----------------------------+
| id | owner | title |
+-------+-------+-----------------------------+
| 1 | 1 | Weekly report #86 |
| 2 | 1 | Weekly report #87 |
| 3 | 1 | Weekly report #88 |
| 4 | 2 | Weekly report #1 |
| 5 | 3 | Weekly report #33 |
| 6 | 3 | Weekly report #34 |
+-------+-------------------------------------+
我需要做什么是GROUP的名字的结果,所以列表本身是字母顺序,但我需要最后一次出现与用户的ID相匹配的行。
REPORTS表的“owner”列与USERS表的“id”列相匹配。
我想要的结果是这样的:
Jane Plick |
John Doe | Weekly Report #34
Johnny Appleseed | Weekly Report #88
Pete Jones | Weekly Report #1
我当前的查询ALMOST作品,但它只会显示用户第一周报,不是最后一次。
SELECT * FROM users AS a LEFT JOIN ppp_reports AS b ON a.id=b.owner WHERE a.active=1 GROUP BY a.id ORDER BY a.firstname ASC
我已经尝试了很多不同的变化,但我总是留下来自REPORTS表的第一行。
任何帮助,非常感谢。
这是标准mysql行为,当你正在做一个'group by'。它会从匹配记录中选择第一个/最早的值以填写组中请求的所有字段。这基本上是“每组最多”,其中“最近的”和n = 1。 – 2014-10-17 14:53:02
您是否假设'reports'表中'id'的最高数字值是最近期的,或者您是否有任何额外字段(如时间戳)来权威性地确定报告的年龄? – 2014-10-17 15:16:43