5

みんな私はmysqlで分析関数ラグを使いたいです。Oracle ではサポートされていますが、Mysql ではできません。Mysqlでラグ操作を実行する方法を誰か助けてもらえますか? 例えば

UID                        Operation
 1                         Logged-in
 2                         View content
 3                         Review

出力が次のようになるようにラグ関数を使用したい

UID                        Operation              Lagoperation
 1                         Logged-in                
 2                         View content           Logged-in
 3                         Review                 View content

Mysqlはラグ機能をサポートしていますか???

4

1 に答える 1

6

ユーザー変数を使用してエミュレートできます。

select uid, operation, previous_operation from (
select
y.*
, @prev AS previous_Operation
, @prev := Operation
from
your_table y
, (select @prev:=NULL) vars
order by uid
) subquery_alias
  • sqlfiddleライブで動作するのを見てください

ここで、変数を初期化します。SET @prev:=NULL;クエリを書く前に書くのと同じです。

, (select @prev:=NULL) vars

次に、select 句でのこれらのステートメントの順序が重要です。

, @prev AS previous_Operation
, @prev := Operation

1 つ目は変数の値を表示するだけで、2 つ目は現在の行の値を変数に割り当てます。

ORDER BY出力が決定論的でないため、節があることも重要です。

これはすべて、審美的な理由からサブクエリに入れられます...これを除外するために

, @prev := Operation

桁。

于 2013-08-26T09:01:54.243 に答える