1

http://docs.memsql.com/5.0/concepts/window_functions/

我检查了上面链接的文档,并提出了几个可能的 SQL 函数,但其​​中任何一个都没有运气。这些才一点点:

select row_number() from test;
select row_number() over (order by _id) from test;
select row_number() over {order by _id} from test;
select row_number() over order by _id from test;
select row_number() over (order by _id) as row_num from test;
select row_number over order by _id as row_num from test;

都给我 ERROR 1064 (42000): You have a error in your SQL syntax;

MemSQL 版本是 5.5.8

当然select _id from test;工作正常?

那么使用的确切语法是什么?还是 MemSQL 中实际上没有这样的东西?

4

1 回答 1

3

您看到的版本字符串是 mysql 兼容版本,我假设您通过SELECT version();. 要正确检查您的 MemSQL 版本,请使用SHOW VARIABLES WHERE Variable_name = 'memsql_version';.

窗口函数是 MemSQL 5 中的新功能,让我相信您没有运行 MemSQL 5。这并不奇怪,因为 5 仍处于测试阶段(截至 2016 年 3 月 16 日)。你可以在这里获得测试版。

在回答您的问题时,dnoeth 正确地指出查询 #2 和 #5 是有效的。为了尽职调查,我已经针对我本地构建的 MemSQL 运行了这些查询,并且它们都有效。

memsql> create table test(_id int);
Query OK, 0 rows affected (0.01 sec)

memsql> insert into test values (1), (2), (3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

memsql> select row_number() over (order by _id) from test;
+----------------------------------+
| row_number() over (order by _id) |
+----------------------------------+
|                                1 |
|                                2 |
|                                3 |
+----------------------------------+
3 rows in set (0.00 sec)

memsql> select row_number() over (order by _id) as row_num from test;
+---------+
| row_num |
+---------+
|       1 |
|       2 |
|       3 |
+---------+
3 rows in set (0.01 sec)

memsql> SHOW VARIABLES WHERE Variable_name = 'memsql_version';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| memsql_version | 5.0   |
+----------------+-------+
1 row in set (0.00 sec)
于 2016-03-16T08:37:13.753 回答