簡體   English   中英

SAP Hana-SQL-計算同一表上的列而無需遞歸函數

[英]SAP Hana - SQL - calculate columns on the same table without recursive functions

我有下面的簡單表。 40k件:

|date|consum|

基於此表,我想計算一些新列。 最后,該表應如下所示:

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

不幸的是,SAP Hana數據庫不支持遞歸表語句。

計算規則如下:

  1. row = row_number() over(order by dates)
  2. row_relative = row*35040/32768 35040/32768
  3. 最小值= floor(row_relative)
  4. 最大值= ceil(row_relative)
  5. min =從具有最小值的行中選擇消費
  6. max =從具有最大值的行中選擇消費

目前,我有5個變量的存儲過程。 在每個變量中,我都會計算出新的coulmn。 它非常非常臟...我該如何改變它? 我不能使用遞歸函數...:/

這是我的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;

您可以在SQLScript BTW中使用以下CTE公用表表達式,非常有趣的是幾乎相同的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM