ホームページ >データベース >mysql チュートリアル >MySQL でラグ関数をシミュレートして連続する値の差を計算するにはどうすればよいですか?
MySQL でのラグ関数のシミュレーション
時系列の連続する値の差 (ラグと呼ばれる) の計算は、賢い回避策を使用して MySQL に実装できます。この手法を理解するために、次の表を考えてみましょう:
<code>| time | company | quote | +---------------------+---------+-------+ | 0000-00-00 00:00:00 | GOOGLE | 40 | | 2012-07-02 21:28:05 | GOOGLE | 60 | | 2012-07-02 21:28:51 | SAP | 60 | | 2012-07-02 21:29:05 | SAP | 20 |</code>
ラグ関数をシミュレートし、引用符の差を計算するには、次の戦略を採用します:
@quot
の初期値は -1 で、@curr_quote
は現在の相場値を追跡するために使用されます。 <code class="language-sql">SET @quot=-1; SELECT time, company, @quot AS lag_quote, @quot:=quote AS curr_quote FROM stocks ORDER BY company, time;</code>
lag_quote
列には前の行の入札値が保持され、curr_quote
には現在の行の入札値が保持されます。 希望の出力形式 (会社名と見積書の違い) を取得するには:
<code>GOOGLE | 20 SAP | 40</code>
ネストされたクエリを使用します:
<code class="language-sql">SET @quot=0,@latest=0,company=''; SELECT B.* FROM ( SELECT A.time, A.change, IF(@comp<>A.company,1,0) AS LATEST, @comp:=A.company AS company FROM ( SELECT time, company, quote-@quot AS change, @quot:=quote AS curr_quote FROM stocks ORDER BY company, time ) A ORDER BY company, time DESC ) B WHERE B.LATEST=1;</code>
このメソッドは、前の行の値を追跡するセッション変数を維持することにより、ラグ関数を効果的にシミュレートします。計算量が多いように見えますが、ネストされたクエリは相互に関連していないため、それでも比較的効率的です。
以上がMySQL でラグ関数をシミュレートして連続する値の差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。