2

我在 MySQL 中有两个表,我想加入一个查询。

表一 opc_tag:

id name

表二 opc_data:

id tag_id value created_at

我想根据“ created_at ”字段列出 opc_tag 中的所有行以及 opc_data 中的最后一条记录。

我试图在谷歌上找到它,但它不起作用。以下查询从opc_data-table 中选择了具有多条记录的标签。

SELECT t.*, d.*
FROM opc_tag t LEFT JOIN opc_data d ON t.id = d.tag_id
WHERE d.created_at = (
    SELECT MAX(d.created_at)
    FROM opc_data d2
    WHERE d2.tag_id = t.id
)
4

2 回答 2

1

我认为这会做到:

SELECT t.*,d.* FROM opc_tag t 
LEFT JOIN opc_data d ON t.id = d.tag_id
WHERE d.created_at = (
    SELECT MAX(created_at) FROM opc_data WHERE tag_id = t.id
)
GROUP BY t.id

如果要显示所有标签,即使是那些没有数据的标签,请在 where 子句中使用:

WHERE d.created_at = (
    SELECT MAX(created_at) FROM opc_data WHERE tag_id = t.id
) OR d.created_at IS NULL
于 2013-08-09T10:09:12.543 回答
0

试试这个,它会得到最后一个 tag_id 在 opc_data by中输入,ORDER BY created_at DESC LIMIT 1并从 tag_id 返回数据opc_tag

SELECT *
FROM opc_tag 
WHERE id= (
    SELECT tag_id
    FROM opc_data 
   ORDER BY created_at DESC LIMIT 1 
)
于 2013-08-09T10:09:45.230 回答