• 締切済み

Lag関数はないのでしょうか?

SQLServer2005を使用しています。 OracleでいうところのLag関数とおなじような関数は、SQLServerにはないのでしょうか? オラクルと同じようにSQLを書くと、「組込関数ではない」とエラーが出てしまいます。 自分で調べて、以下のURLのように記述してみると、今度は「Rows付近に不適切な構文があります。」と言われてしまいます。。。 http://oraclesqlpuzzle.hp.infoseek.co.jp/db2/db2-8-1.html SQLServerでは、実現できないのでしょうか?

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

SQL ServerにLAG関数はありません。ないならないで、別案を考えるしかないということです。 分析関数でも、ROW_NUMBER関数はあるわけですから、LAGの分だけずらして結合すればいいと思います。 SELECT t1.KEY1, t1.VALUE1, t2.VALUE1 FROM (SELECT ROW_NUMBER() OVER (PARTITION BY KEY1 ORDER BY VALUE1) SEQ, KEY1,VALUE1 FROM TABLE1) t1 LEFT OUTER JOIN (SELECT ROW_NUMBER() OVER (PARTITION BY KEY1 ORDER BY VALUE1) SEQ, KEY1,VALUE1 FROM TABLE1) t2 ON t1.KEY1=t2.KEY1 AND t1.SEQ=t2.SEQ+n <==ここ ORDER BY t1.KEY1,t1.VALUE1 なお、ご覧になったページはDB2のものですよね。 分析関数の構文や実装状況はDBMS、バージョンにより全然違います。

osaru_kun
質問者

お礼

ありがとうございます。 DB2のものでしたね。。。 別の掲示板でSQLServerカテゴリにこのページへのリンクがあったので、そのまま参考にしていました。 やはり別の方法で実現するしかないということですね。 ありがとうございました。

  • bleis
  • ベストアンサー率68% (11/16)
回答No.1

そのページはDB2用のSQLを解説しているため、SQL Serverでは使用できません。 分析関数は全然使っていないので、標準的なSQLでやる方法しか分かりませんが、以下のページが参考になるはずです。 http://codezine.jp/article/detail/3105 http://codezine.jp/article/detail/907

osaru_kun
質問者

お礼

ありがとうございました。 サイト、参照してみます。

関連するQ&A