2016-11-30 14 views
0

私は次のような簡単なテーブルを持っています。 40,000個のアイテム:SAP Hana - SQL - 再帰関数なしで同じテーブルの列を計算する

|date|consum| 

この表に基づいて、いくつかの新しい列を計算します。最後には、テーブルがどのように見えるはずです。残念ながら、SAPハナデータベースは、再帰テーブル・ステートメントをサポートしていません

|date|consum|row|row_relativ|min|max|upper|lower| 

...ここ

は、計算ルールは以下のとおりです。

  1. 行= row_number() over(order by dates)
  2. row_relative =
  3. row*35040/32768
  4. 分= floor(row_relative)
  5. 最大= ceil(row_relative)
  6. 最小=最小値と列からは消耗品を選択
  7. 最大=私が記憶されているprecedureを有する瞬間最大値

と列からは消耗品を選択します5つの変数。各変数では、私は新たな変数を計算します。それは非常に汚いです...どうすれば違うのですか?それは非常にある、あなたはところで、あなたのSQLScript で次のCTE共通テーブル式を使用することができます)=楽しさを持っている...ここで/

私のSQLスニペットです

var1 = select *, row_number() over(order by dates) as row from XYZ order by dates limit 34944; 
var2 = select *, (row * 34944/32768) as row_relative from :var1; 
var3 = select *, floor(row_relative) as min, ceil(row_relative) as max from :var2; 

var4 = select 
    p.*, 
    (select consumfrom :var3 where row = p.min) as lower, 
    (select consumfrom :var3 where row = p.max) as upper 
from :var3 p; 

var5 = select 
    p.*, 
    (p.lower* (1-p.row_relative+p.min)+p.upper * (p.row_relativ - p.min)) as new_consum 
from :var4 p; 

答えて

0

を:私は...は、再帰関数を使用するカントほぼ同じSQL Server CTE構文は、SAP HANA SQLScript構文と一致していること:)

with cte as (
select 
    date, 
    consum, 
    row_number() over (order by date) as row 
from rawdata 
) 
select 
    date, 
    consum, 
    row, 
    row * 35040/32768 as row_relative, 
    floor((row * 35040/32768)) as min, 
    ceil((row * 35040/32768)) as max, 
    (select cte2.consum from cte cte2 where row = floor((cte.row * 35040/32768))) as min2, 
    (select cte2.consum from cte cte2 where row = ceil((cte.row * 35040/32768))) as max2 
from cte 
+0

HANA CTEは、SQL ServerのCTEの構文と一致した理由は驚きではありません興味深いです。共通テーブル式の構文はSQL標準で定義されているため、「SQL Server」では定義されていないため(マイクロソフトでは標準を無視していました)それらは** Microsoftが発明した**ものではありません**。そして、他のDBMSは、Microsoftがそれらを追加することを考えようとずっと前から –

関連する問題