2017-12-27 11 views
3
SELECT ROW_NUMBER()OVER(ORDER BY id), x, y, id 
FROM coordonnees 
ORDER BY id 

私はそれぞれの行の行番号(3列でcoordonneesという名前のテーブル:idxy)を返すようにしようとしているが、このコードは構文EROR行番号データベース

を動作しません。エラーは、次のとおり

構文エラー近く「(ID BY ORDER)、X、Y、IDデータベースに

:MYS QL 5.7.9

+1

使用しているデータベースで質問にタグを付けてください。すべてのデータベースが 'row_number()'をサポートするわけではありません。 –

+0

構文は[正しい](http://rextester.com/HJVI30138)です。使用しているDBMSが現代のSQLをサポートしていないことがあります。 –

+0

@a_horse_with_no_nameお世話になります –

答えて

1

明らかに、MySQL 5.7はROW_NUMBER()をサポートしていません。しかし、私はthis siteでそれをエミュレートする斬新な解決策を見つけました。

SELECT @row_num := IF(@prev_value=c.id,@row_num+1,1) AS RowNumber 
     ,c.x 
     ,c.y 
     ,c.id 
     ,@prev_value := c.id 
FROM coordonnees c, 
    (SELECT @row_num := 1) x, 
    (SELECT @prev_value := -1) y 
ORDER BY c.id 

は、しかし、いくつかの注意点があります。

  • @row_num変数は@prev_value変数の前に設定する必要があります。
  • ORDER BYの最初のフィールドは、パーティショニングするフィールドでなければなりません。
  • 変数@prev_valueに割り当てられたデフォルト値は、パーティションバイフィールドに存在してはいけません。