2017-04-15 5 views
0

このクエリーは、Oracleをバックエンドとして使用しているときに望ましい結果を示します。interbaseでSQL LEAD()とLAG()クエリを書くには?

select field1, 
     field2 
from 
    (select field1, 
      field2, 
      LEAD(field2) over (order by r) name 
    from 
     (select rownum r, 
       field1, 
       field2 
     from t3 
     where field2 = 1 
     ) 
    ) 
where v != nvl(name, -1); 

しかし、分析機能lag()lead()がInterBase6でサポートされていないので、InterBaseデータベースへの照会ながら、私は問題に直面しています。

私の要件は、array field2={1,3,4,4,3,4}なら、結果は{1,3,4,3,4}となるはずです。

+0

で見つけることができるhttp://firebirdsql.org/file([それは 'lead'と' lag'サポート]を、3火の鳥への切り替えを検討/documentation/release_notes/html/en/3_0/rnfb30-dml-windowfuncs.html#d0e6678)。あなたはまだInterbase 6にいますか?それは17年前にリリースされました... Firebird 0.xがInterbase 6からフォークされていた頃でした。 –

+0

@ Ashish4434 - 質問はまだ開いています。あなたが答えのどれかに満足すれば、それを「受け入れ」、その質問は閉じられるかもしれません。 [誰かが私の質問に答えるときに何をすべきか](http://stackoverflow.com/help/someone-answers)を読んでください。また、以前の質問を閉じてみてください。 – Utsav

答えて

1

私はinterbaseについて考えていませんが、私はあなたにリード関数を複製するためのクエリを書くためのポイントを与えることができます。その上に構築することができます。

  1. 行を並べ替える列を探します。 oracleクエリーで使用しているrownumは正しい方法ではありません。結果が常に同じ順序で表示されることを保証するものではありません。したがって、field1を注文したい列とします。

  2. ここで、上記の順序に基づいて、インターベース内に1 - nのシーケンス番号を生成する方法を見つけることができます。あなたの合計行数はnです。サンプルテーブルは以下のようになります。

    +-----+--------+--------+ 
    | seq | field1 | field2 | 
    +-----+--------+--------+ 
    | 1 | 101 |  1 | 
    | 2 | 102 |  3 | 
    | 3 | 103 |  4 | 
    | 4 | 104 |  4 | 
    | 5 | 105 |  3 | 
    +-----+--------+--------+ 
    
  3. 上記の作業を完了すると、ほぼ完了です。リードまたはラグ機能を複製するには、自己結合を行うだけです。ここでは、このクエリの出力はあなたがリード機能を複製するために必要なものである、このようになりますlead

    select t1.field1 
    ,t1.field2 
    ,t2.field1 as lead_field1 
    ,t2.field2 as lead_field2 
    from table1 t1 
    left join 
    (select seq-1 as prev_seq,field1,field2 
    from table1) t2 
    on t1.seq=t2.prev_seq 
    

の一例です。

+--------+--------+-------------+-------------+ 
| field1 | field2 | lead_field1 | lead_field2 | 
+--------+--------+-------------+-------------+ 
| 101 |  1 | 102   | 3   | 
| 102 |  3 | 103   | 4   | 
| 103 |  4 | 104   | 4   | 
| 104 |  4 | 105   | 3   | 
| 105 |  3 | NULL  | NULL  | 
+--------+--------+-------------+-------------+ 

同様のサンプルは

http://rextester.com/IJIU40428

関連する問題