0
我有以下簡單的表格, 40k條目:SAP Hana - SQL - 計算不含遞歸函數的同一個表上的列
|date|consum|
基於此表,我想計算一些新的列。最後,這個表應該是這樣的:
|date|consum|row|row_relativ|min|max|upper|lower|
不幸的是,SAP HANA數據庫不支持遞歸表的語句...
下面是計算規則:
- 行=
row_number() over(order by dates)
- row_relative =
row*35040/32768
- 分鐘=
floor(row_relative)
- 最大=
ceil(row_relative)
- 分鐘=選擇該行中的消費與最小值
- 最大=選擇該行中的消費與最大值
目前我有一個存儲precedure與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;
爲什麼HANA CTE相匹配的SQL Server的CTE語法是不是一個驚喜的原因。由於公用表表達式的語法是在SQL標準中定義的,而不是由「SQL Server」定義的(並且Microsoft在某種程度上確實忽略了該標準)。他們不是**微軟發明的東西。在微軟甚至考慮過添加它們之前,其他DBMS早已擁有它們 –