Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MariaDB中使用ROW_NUMBER()函数时出现问题_Mariadb_Window Functions - Fatal编程技术网

在MariaDB中使用ROW_NUMBER()函数时出现问题

在MariaDB中使用ROW_NUMBER()函数时出现问题,mariadb,window-functions,Mariadb,Window Functions,我希望在select表输出中有一个row number列,但是当我尝试使用row_number()函数时,MariaDB抛出一个语法错误。在web()上有几个引用,但到目前为止我还没有成功。以下是我的MariaDB表格的一部分: +---------------------+------------+ | date_reading | temp_patio | |---------------------+------------+ | 2019-09-03 06:26:0

我希望在select表输出中有一个row number列,但是当我尝试使用row_number()函数时,MariaDB抛出一个语法错误。在web()上有几个引用,但到目前为止我还没有成功。以下是我的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 |
文档中说“OVER()”选项是可选的,但是我已经尝试了有和没有OVER()子句以及有和没有ORDER BY子句

这是我的select命令:

从MyData中选择()上方的行作为箭头,* 日期读取>现在()-间隔3小时

或者,我尝试过不使用
OVER()
子句,也可以使用
OVER(orderbyid)

我的版本是

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

有人能帮忙吗?…RDK

仅在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;
对于较低版本:

我们可以用计算机来做这项工作

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;
仅在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;
对于较低版本:

我们可以用计算机来做这项工作

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;

根据MariaDB关于
行号
的官方文件,它是。因此,您的版本可能甚至不支持
行号
。您的maria db versionOK是什么,看起来我需要更新。这是令人惊讶的,因为大约一周前,我才通过正常的“sudo-apt-get-install-mariadb服务器”在这个Raspberry Pi上安装了它。他们的图书馆可能落后了?将10.2添加到此Pi的正确过程是什么?而且,使用“新”版本是否存在问题?根据MariaDB关于
行号
的官方文档,它是。因此,您的版本可能甚至不支持
行号
。您的maria db versionOK是什么,看起来我需要更新。这是令人惊讶的,因为大约一周前,我才通过正常的“sudo-apt-get-install-mariadb服务器”在这个Raspberry Pi上安装了它。他们的图书馆可能落后了?将10.2添加到此Pi的正确过程是什么?还有,使用“新”版本有问题吗?谢谢,在我得到升级版本之前,这与charmNote类似。如果您按两列排序,则此技巧在
@row_num
中可能不起作用。如何使其在我的表中创建列,使其在我的数据库表中而不是输出?为此输出选择PK和row_编号,并再次使用PK(primarykey)连接同一个表,然后使用update语句谢谢,在我获得升级版本之前,这就像一个charmNote。如果您按两列排序,则此技巧在
@row_num
中可能不起作用。我如何使其在我的表中创建列,使其在我的数据库表中而不是输出中?为此输出选择PK和row_编号,并再次使用PK(primarykey)连接同一个表并使用update语句