我有一个数据库,将每个传感器的温度读数以及传感器ID和读取日期存储在a中。
SELECT DISTINCT `date` FROM `temperatureData` ORDER BY `date` ASC LIMIT 10这使我可以选择要在图表中绘制的最后10个读数。每个日期最多有40个传感器读数。
我试着做了以下事情。
SELECT `date`, `sensor`, `temp`
FROM `temperatureData`
WHERE `date` = (
SELECT DISTINCT `date` FROM `temperatureData` ORDER BY `date` ASC LIMIT 10
)有人可以帮助我如何选择从过去10个日期返回的日期的所有读数吗?
提前谢谢。鲍里斯
发布于 2019-11-13 06:20:31
您只需要使用in而不是=
SELECT `date`, `sensor`, `temp`
FROM `temperatureData`
WHERE `date` IN (
SELECT DISTINCT `date` FROM `temperatureData` ORDER BY `date` DESC LIMIT 10
)注:如果您想要最近10个日期的读数,您可能希望使用ORDER BY date DESC而不是ASC。我也改变了这点。
在MySQL 8.0中,这也可以用窗口函数dense_rank()重写
SELECT `date`, `sensor`, `temp`
FROM (
SELECT
`date`,
`sensor`,
`temp`
DENSE_RANK() OVER(ORDER BY `date` DESC) rn
FROM `temperatureData`
) t
WHERE rn <= 10编辑
要解决MySQL 5.7在使用IN的子查询中不支持LIMIT的限制,您可以改用联接:
SELECT t.`date`, t.`sensor`, t.`temp`
FROM `temperatureData` t
INNER JOIN (
SELECT DISTINCT `date` FROM `temperatureData` ORDER BY `date` DESC LIMIT 10
) d ON d.`date` = t.`date`https://stackoverflow.com/questions/58827542
复制相似问题