-1

我正在尝试为家庭助理确定一天内的平均温度。我已将传感器链接到家庭助理,后者将数据发送到 phpmyadmin。我无法通过家庭助理单独发送传感器,但它们都列在文件夹状态中。见下文。

文件夹状态下的传感器

通过家庭助理发送一个 sql 代码,我可以在数据库中搜索值。所以现在我试图找到最后 100 次测量的平均值(+/- 1 天)。为此,我编写了以下 sql 代码。

SELECT AVG(`state`) 
FROM states 
WHERE state_id > (select state_id 
                    FROM states 
                    WHERE entity_id='sensor.weatherstation_ground_temperature' 
                    AND state <> unknown 
                    ORDER BY state_id DESC 
                    OFFSET 0 ROWS FETCH FIRST 100 ROWS ONLY)

如果我在 phpmyadmin 中输入它,我会收到以下错误:

1064 - 第 1 行中用于 'OFFSET 0 ROWS FETCH FIRST 100 ROWS ONLY) LIMIT 0, 25' 的语法有错误。

我的问题是:我做错了什么,还是有更好的方法?

4

1 回答 1

0

fetch firstMySQL 中不存在;你需要limit

SELECT AVG(s.`state`) 
FROM states s
INNER JOIN (
    SELECT state_id 
    FROM states 
    WHERE entity_id='sensor.weatherstation_ground_temperature'  AND state <> 'unknown' 
    ORDER BY state_id DESC 
    LIMIT 100
) x ON x.state_id = s.state_id

您的查询的其他问题:

  • 使用的子查询LIMIT不能与IN运算符一起使用:您可以使用 aJOIN代替

  • state <> unknown应该拼写state <> 'unknown'(这是一个语法错误)

旁注:OFFSET 0是默认的,所以我这里可以忽略。

于 2019-11-15T12:59:35.560 回答