2016-04-23 51 views
-4

请让我知道,如果有任何语法错误,因为,按照我的理解,查询是完美的:有没有语法错误,因为,按照我的理解,查询是完美

mysql> SELECT Cust_Id,Plan_Id FROM(SELECT Cust_Id,Plan_Id,ROW_NUMBER() OVER (PARTITION BY Cust_Id ORDER BY cnt DESC) AS RN FROM(SELECT Cust_Id,Plan_Id,COUNT(1) as cnt FROM customer GROUP BY (Cust_Id,Plan_Id))) WHERE RN =1; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use 
near '(PARTITION BY Cust_Id ORDER BY cnt DESC) AS RN FROM(SELECT Cust_Id,Plan_Id,COUNT' 
at line 1 
+0

显然,你需要与你的DBMS(MySQL的)的讨论,因为它与你不同意你的SQL的完善。总的来说,我怀疑数据库管理系统是正确的,你的完美主张被夸大了。您使用的是哪个版本的MySQL? –

+1

这是Microsoft SQL SERVER语法不是mysql的。 Mysql没有row_number()over()构造 –

+0

显然你的理解是不正确的。你应该努力,因为理解在大多数时候都很重要。 –

回答

1

MYSQL做不支持ROW_NUMBER()

你必须重写查询,如下

SELECT Cust_Id,Plan_Id 
FROM (
     SELECT Cust_Id,Plan_Id, 
       @row_num := IF(@prev_value=T.Cust_Id,@row_num+1,1) AS RN, 
       @prev_value := T.Cust_Id 
     FROM (
      SELECT Cust_Id,Plan_Id,COUNT(1) as cnt 
      FROM customer 
      GROUP BY (Cust_Id,Plan_Id) 
      ) T, 
      (SELECT @row_num := 1) x, 
      (SELECT @prev_value := 0) y 
    )S WHERE RN =1;