[英]Return latest row ordered by ID while using group by
我有2个表,例如A和B包含一些数据
TABLE A TABLE B
+----+-------+ +----+------+--------+
| id | title | | id | a_id | status |
+----+-------+ +----+------+--------+
| 1 | apple | | 1 | 1 | 0 |
| 2 | eggs | | 2 | 1 | 1 |
+----+-------+ | 3 | 1 | 2 |
| 4 | 1 | 3 |
| 5 | 1 | 0 |
| 6 | 1 | 1 |
| 7 | 2 | 0 |
| 8 | 2 | 1 |
| 9 | 2 | 2 |
| 10 | 1 | 0 |
| 11 | 1 | 3 |
+----+------+--------+
我想从表A中选择水果并与表B一起加入并获得最新的状态记录(按ID)。
我的桌子包含大约10k的水果和100 + k的状态。
所以结果会是这样的
+------+---------+------+--------+----------+
| a.id | a.title | b.id | b.a_id | b.status |
+------+---------+------+--------+----------+
| 1 | apple | 11 | 1 | 3 |
| 2 | eggs | 9 | 2 | 2 |
+------+---------+------+--------+----------+
我可以用group by sql脚本这样做
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id GROUP_BY a.id
但它从表B得到第一项,因此结果不正确。
您可以使用substring_index()
/ group_concat()
技巧:
select a.title,
substring_index(group_concat(status order by id desc), ',', 1) as laststatus
from b join
a
on a.id - b.a_id
group by a.title;
编辑:
如果你只想要b的最后一条记录,你可以这样做:
select a.title, b.status
from b join
a
on a.id - b.a_id
order by b.id desc
limit 1;
所有由b.id订购的regs
SELECT *
FROM a
INNER JOIN b
ON a.ID = b.A_ID
ORDER BY b.ID desc;
只需1个注册。
SELECT * FROM A
INNER JOIN B
ON A.ID = B.A_ID
WHERE A.ID = (select max(B.A_ID) from B);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.