我希望有人能帮我。
我的问题。
SELECT * FROM `tbl_device`
INNER JOIN `tbl_temperature` ON tbl_device.ID = tbl_temperature.DevID结果。

如何才能获得如链接上的照片所示的东西。

我只需要获取tbl_device.DevID的最后3个结果
我为我糟糕的英语道歉,这真的很难解释。任何帮助都是非常感谢的。
非常感谢!
发布于 2018-03-10 20:26:48
最简单的方法是使用ANSI标准的窗口函数(特别是row_number())。但MySQL (目前)还不支持这些。
在MySQL中,最好的方法可能是使用变量:
SELECT . . .
FROM tbl_device d JOIN
(SELECT t.*,
(@rn := if(@d = t.devid, @rn + 1,
if(@d := t.devid, 1, 1)
)
) as rn
FROM (SELECT t.*
FROM tbl_temperature t
ORDER BY DevID, id DESC
) t CROSS JOIN
(SELECT @d := -1, @rn := 0) params
) t
ON tbl_device.ID = tbl_temperature.DevID
WHERE rn <= 3;编辑:
这里有一种更简单的方式来表达逻辑。如果使用正确的索引,它的性能可能会更好:
SELECT d.*, t.*
FROM tbl_device d INNER JOIN
tbl_temperature t
ON d.ID = t.DevID
WHERE t.ID >= (SELECT t2.ID
FROM tbl_temperature t2
WHERE t2.DevId = t.DevId
ORDER BY t2.ID DESC
OFFSET 2 LIMIT 1
);为了提高性能,这可以在tbl_temperature(devid, id)上使用索引。
发布于 2018-03-10 20:28:37
它应该是这样的
SELECT * FROM `tbl_device`
INNER JOIN `tbl_temperature` ON tbl_device.ID = tbl_temperature.DevID
ORDER BY tbl_temperature.DevID DESC
LIMIT 3 OFFSET 0order列可以与我的示例中的不同。谷歌MySQL限制偏移量
或者,如果您只需要从一个表中获得最后三个结果,然后将其连接到另一个表,那么它将类似于
SELECT * FROM tbl_device INNER JOIN
(SELECT .... FROM other_table ORDER BY your_column DESC LIMIT 3 OFFSET 0) as
T1 ON T1.id = tbl_device.IDhttps://stackoverflow.com/questions/49209028
复制相似问题