2016-04-23 23 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; 
相關問題