在 MariaDB 中使用 ROW_NUMBER() 函数的问题

RDK*_*RDK 1 mariadb window-functions

我想在选择表输出中有一个行号列,但是当我尝试使用 ROW_NUMBER() 函数时,MariaDB 会引发语法错误。网上有几个参考资料(http://www.mysqltutorial.org/mysql-window-functions/mysql-row_number-function/)但到目前为止我还没有成功。这是我的 MariaDB 表的一部分:

+---------------------+------------+  
| date_reading        | temp_patio |
|---------------------+------------+  
| 2019-09-03 06:26:00 |       17.6 |  
| 2019-09-03 06:33:00 |       17.5 |  
| 2019-09-03 06:40:00 |       17.5 |  
| 2019-09-03 06:46:00 |       17.5 |  
| 2019-09-03 06:53:00 |       17.4 |  
| 2019-09-03 07:00:00 |       17.4 |  
| 2019-09-03 07:07:00 |       17.4 |  
| 2019-09-03 07:13:00 |       17.4 |
Run Code Online (Sandbox Code Playgroud)

文档说“ OVER()”选项的选项是可选的,但我已经尝试过有和没有OVER()子句以及有和没有ORDER BY子句。

这是我的选择命令:

select ROW_NUMBER() OVER ( ) as Therow, * from MyData where Date_Reading > Now()- INTERVAL 3 HOUR;

(可选)我尝试不使用该OVER ()子句并使用OVER ( ORDER BY ID).

我的 MariaDB 版本是

服务器版本:10.1.38-MariaDB-0+deb9u1 Raspbian 9.0

有人可以帮忙吗?...RDK

Jit*_*dav 5

仅 MariaDB 10.2 或更高版本支持窗口函数

MariaDB 10.2 或更高版本:

SELECT 
    MyData.*,
    ROW_NUMBER() OVER ( ORDER BY ID ) as Therow
FROM MyData 
WHERE Date_Reading > Now()- INTERVAL 3 HOUR;
Run Code Online (Sandbox Code Playgroud)

对于较低版本:

我们可以使用MySQL 变量来完成这项工作。

SELECT 
    MyData.*, 
    @row_num:= @row_num + 1 AS Therow
FROM 
    MyData, 
    (SELECT @row_num:= 0 AS num) AS c
WHERE Date_Reading > Now()- INTERVAL 3 HOUR
ORDER BY test.`date` ASC;
Run Code Online (Sandbox Code Playgroud)