MySQL连接查询只有一个来自连接表的记录,按日期排序

时间:2013-08-09 10:03:15

标签: mysql sql

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

表一opc_tag:

id name

表二opc_data:

id tag_id value created_at

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

我试图在Google上找到它,但它不起作用。 以下查询从 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
)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试此操作,它会在opc_data ORDER BY created_at DESC LIMIT 1之前输入最后一个tag_id,并从opc_tag

返回tag_id的数据
SELECT *
FROM opc_tag 
WHERE id= (
    SELECT tag_id
    FROM opc_data 
   ORDER BY created_at DESC LIMIT 1 
)