首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于最近10个日期的MySQL嵌套查询

基于最近10个日期的MySQL嵌套查询
EN

Stack Overflow用户
提问于 2019-11-13 06:18:59
回答 1查看 107关注 0票数 0

我有一个数据库,将每个传感器的温度读数以及传感器ID和读取日期存储在a中。

代码语言:javascript
复制
SELECT DISTINCT `date` FROM `temperatureData` ORDER BY `date` ASC LIMIT 10

这使我可以选择要在图表中绘制的最后10个读数。每个日期最多有40个传感器读数。

我试着做了以下事情。

代码语言:javascript
复制
SELECT `date`, `sensor`, `temp` 
FROM `temperatureData` 
WHERE `date` = (
    SELECT DISTINCT `date` FROM `temperatureData` ORDER BY `date` ASC LIMIT 10
)

有人可以帮助我如何选择从过去10个日期返回的日期的所有读数吗?

提前谢谢。鲍里斯

EN

回答 1

Stack Overflow用户

发布于 2019-11-13 06:20:31

您只需要使用in而不是=

代码语言:javascript
复制
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()重写

代码语言:javascript
复制
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的限制,您可以改用联接:

代码语言:javascript
复制
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`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58827542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档