SQL 代码错误(OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY)

SQL code error (OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY)

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

sensors in folder states

通过家庭助理发送 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 - There is an error in the syntax used for 'OFFSET 0 ROWS FETCH FIRST 100 ROWS ONLY) LIMIT 0, 25' in line 1.

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

fetch first 在 MySQL 中不存在;您需要 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 运算符一起使用:您可以使用 JOIN 代替

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

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