繁体   English   中英

使用group by时返回按ID排序的最新行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM