HANA 一些sql语句

函数!!
时间函数:DAYS_BETWEEN、ADD_DAYS、FORMAT、CURRENT_DATE、YEAR、MONTH等。
        字符串函数:CONCAT、TRIM、LENGTH、REPLACE、STRING_AGG、SUBSTRING等;

 数字函数 ROUNDFLOORRANDABS

视图!!!

如果要创建计算视图写sql脚本的那种,在新建的时候就要选对类型了!

视图创建知识参考链接:HANA Studio-建模-长篇_xiaomici的博客-CSDN博客_hana studio[Hana学习笔记]Hana自定义函数_XLevon的博客-CSDN博客_hana函数

开窗函数!!!也很重要!!!

以下有一个表格↓

 进行分组排序和不分组排序↓  首先是不重复排名序号的排名!!!

以下是有重复值的序号排名↓ 

各种参数解释参考:开窗函数lag()_lead()(二)_妙趣生花的博客-CSDN博客_开窗函数lead

原表:

 参数:

1  LAG

2  LEAD

 select lead(start_time,1,-3)over(order by start_time) from exam_record;

 dense_rank() over():连续排序。对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。

4  NTILE:可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。

5  PERCENT_RANK

6  PERCENTILE_CONT

7  PERCENTILE_DISC和CUME_DIST

                cume_dist 返回小于等于当前值的行数/分组内总行数
                比如,我们可以统计小于等于当前薪水的人数,所占总人数的比例

8  RANDOM_PARTITION

FIRST_VALUELAST_VALUE 函数
     FIRST_VALUE 取分组内排序后,截止到当前行,第一个值

    LAST_VALUE函数则相反:
     LAST_VALUE 取分组内排序后,截止到当前行,最后一个值

10  SERIES_FILTER

11  WEIGHTED_AVG

※这里有个开窗函数的例子,关于  最近七天平均值的。  ↓

Hana自定义函数参考:[Hana学习笔记]Hana自定义函数_XLevon的博客-CSDN博客_hana函数

创建语法: 

create function 函数名
(	
	in 参数 参数类型
)
returns 返回值 返回值类型
language sqlscript as
begin
	SQL语句
end;

实际案例:

create function FV_MARA_MATNR
(	
	in i_matnr 		nvarchar(40)		--输入物料代码
)
returns o_matnr nvarchar(40)			--输出物料代码
language sqlscript as
begin
	if(:i_matnr <> '') then
		select case when length(replace_regexpr('[^0-9]' in :i_matnr))=length(:i_matnr) then
		left('000000000000000000',18-length(:i_matnr))||(:i_matnr) else :i_matnr end
		into o_matnr
		from dummy;
	else
		select :i_matnr into o_matnr from dummy;
	end if;
end;

SAP Hana存储过程:SAP Hana存储过程_黑斯汀的博客-CSDN博客_hana执行存储过程

create procedure sp_test (in date varchar(10),out a1 t_a1)  --参数定义,格式为:(IN|OUT|INOUT VAR_NAME VAR_TYPE),多个参数之间用,相隔,可不定义;注意:定义了with result view  必须有out参数,且必须为table类型
	language sqlscript 		--指定存储过程实现的程序语言,默认为: SQLSCRIPT,可不定义
	sql security invoker 	--指定存储过程的安全模式,默认: DEFINER,可不定义
	reads sql data 			--存储过程为只读的,不能包含DDL与DML(INSERT、UPDATE、DELETE)语句,如果调用其他存储过程,则被调用过程也是只读的。可不定义
	with result view test2 	--将只读取存储过程的输出看做结果视图,可以被其他查询SQL用来查询,此时存储过程就像一个表或视图。可不定义
as 
begin 	
	a1 = 
		with a as (
		select * from a1 where date = :date  --引用变量需要使用: + 变量名称
		)
		SELECT * FROM a
	;
end;

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值