情况(简化):
表A
id | id_device
----+----------
... | 10
... | 11
... | 12
表B
id | id_device | val
----+-----------+----
... | 10 | 200
... | 10 | 105
... | 10 | 120
... | 11 | 80
预期结果:来自 的所有记录tableA
,对于 的每条记录tableA
, 上的最后一个相关记录tableB
。
id_device | val
----------+-----
10 | 120
11 | 80
12 | null
我试过这样的事情,但我无法正确获得最后一条记录:
SELECT tableA.*,
tableB.*
FROM tableA
LEFT JOIN (
SELECT id_device,
val,
MAX(id)
FROM tableB
GROUP BY id_device
) AS tableB
ON tableA.id_device = tableB.id_device
您的子查询正在为and选择MAX(d)
fromtableB
和 undetermined 值。当. 为此,您需要选择,然后基于它加入。您可以通过使用简单的降序并选择顶行来实现:id_device
val
MAX(id)
MAX(id)
SELECT tableA.id_device, tableB.val
FROM tableA
LEFT JOIN tableB ON tableB.id = (SELECT id
FROM tableB
WHERE tableA.id_device = tableB.id_device
ORDER BY id DESC
LIMIT 1)
这允许您从 中选择多个字段tableB
,但如果您只对单个字段感兴趣,例如val
,您也可以直接从子查询中选择它,而不是加入它:
SELECT tableA.id_device, (SELECT val
FROM tableB
WHERE tableA.id_device = tableB.id_device
ORDER BY id DESC
LIMIT 1) AS val
FROM tableA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句