在 MariaDB 中使用 ROW_NUMBER() 函数的问题
Posted
技术标签:
【中文标题】在 MariaDB 中使用 ROW_NUMBER() 函数的问题【英文标题】:Problem Using ROW_NUMBER() function in MariaDB 【发布时间】:2019-09-03 05:48:14 【问题描述】:我想在选择表输出中有一个行号列,但是当我尝试使用 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 |
文档说“OVER ()” 选项的选项是可选的,但我尝试了使用和不使用 OVER () 子句以及使用 and没有 ORDER BY 子句。
这是我的选择命令:
选择 ROW_NUMBER() OVER ( ) 作为 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
【问题讨论】:
根据ROW_NUMBER
的MariaDB 官方文档,它是only supported on 10.2 versions and later。所以,你的版本甚至可能不支持ROW_NUMBER
。
你的 maria db 版本是什么
好的,看来我需要更新了。这很令人惊讶,因为我大约一周前才通过普通的“sudo apt-get install mariadb-server”将它安装在这个 Raspberry Pi 上。他们的图书馆可能落后了?将 10.2 安装到这个 Pi 上的正确过程是什么?而且,使用“新”版本是否有问题?
【参考方案1】:
Window functions 仅在 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;
低版本:
我们可以使用MySQL variable 来完成这项工作。
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;
【讨论】:
谢谢,直到我得到升级版,它就像一个魅力 请注意,如果您按两列排序,@row_num
的这个技巧可能不起作用。
如何在我的表中创建列,使其在我的数据库表中而不是输出?
为此输出选择 PK 和 row_number 并使用 PK(primarykey) 再次加入同一个表并使用更新语句以上是关于在 MariaDB 中使用 ROW_NUMBER() 函数的问题的主要内容,如果未能解决你的问题,请参考以下文章
MariaDB ROW_NUMBER 与 ORDER BY 未正确排序