2016-04-15 5 views
0

前の列と現在の列の差を計算し、increaseという名前の新しい列にしたいとします。このため、私はlag window functionを使用しています。前の列が存在しないため、最初の列の値は定義されていません。私は3番目のパラメータがデフォルト値を指定することを知っています。しかし、それは依存しています。最初の行については、別の列の値を使用したいと思います。現在の行からcountのいずれかです。これは、私が必要とする最初の行についてカウントするために0が増加することを前提としています。 関数の3番目の引数として列名を指定すると、正しく機能せず、どちらも0を使用しません。どのようにすることができますか?私はかなりランダムな結果や負の数など、奇妙な結果を得ています。ラグ関数を使用して現在の行の値にアクセスする

SELECT *, mycount - lag(mycount, 1) OVER (ORDER BY id, messtime ASC) AS increase FROM measurements; 

ウィンドウ関数は、どちらかの入れ子にすることはできません。

ERROR: window function calls cannot be nested 
+0

このサンプルデータでは、いくつかのサンプルデータ(12行)と正しいクエリ結果が必要です。 –

答えて

0

COUNTは、SQLの予約語です。どうにかしてCOUNTLAGをネストしたいとDBMSが考えているようです。

別の列名を使用するか、列に引用符を使用します。

SELECT *, "count" - lag("count", 1) OVER 
+0

これは問題ではありません。混乱させて申し訳ありません – BullyWiiPlaza

0

クエリと別の問題があります:これまでのところ、あなたの結果がランダムな順序であり、あなたが問題を見ていると思うかもしれので、そのドン」存在しない。

をクエリに追加すると、順番に行が表示されます。これで、1行とその前の行を直接比較することができます。それでも問題はありますか?もしそうなら、正確に?

SELECT *, "count" - lag("count", 1) OVER (ORDER BY id, messtime) AS increase 
FROM measurements 
ORDER BY id, messtime; 
関連する問題