我希望有人可以帮助我。
我的查询。
SELECT * FROM `tbl_device`
INNER JOIN `tbl_temperature` ON tbl_device.ID = tbl_temperature.DevID
结果。
如何在链接上的照片中看到这样的内容。
我只需要获取tbl_device.DevID
的最后3个结果我为我糟糕的英语道歉,这很难解释。任何帮助都非常感谢。
非常感谢!
答案 0 :(得分:1)
最简单的方法是使用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)
上的索引。
答案 1 :(得分:1)
应该是
SELECT * FROM `tbl_device`
INNER JOIN `tbl_temperature` ON tbl_device.ID = tbl_temperature.DevID
ORDER BY tbl_temperature.DevID DESC
LIMIT 3 OFFSET 0
订单栏可能与我的示例中的不同。 Google MySQL LIMIT OFFSET
或者,如果您只需要从其中一个表中获得最后三个结果,然后将其加入另一个表,那么它将类似于
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.ID