加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数据处理之PostgreSQL过程语言学习

发布时间:2020-12-14 02:20:37 所属栏目:大数据 来源:网络整理
导读:前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市。发现使用PostgreSQL过程语言可以大大加快自己处理数据的效率,下面就举个例子吧!相信大家看了后,也会喜欢上PostgreSQL过程语言的.

前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市。发现使用PostgreSQL过程语言可以大大加快自己处理数据的效率,下面就举个例子吧!相信大家看了后,也会喜欢上PostgreSQL过程语言的.......


首先给出一段SQL脚本,该SQL查询2015年9月10日的欠费数据:



?
1
2
3
4
5
6
7
8
9
SELECT DISTINCT
A.DAY_ID 统计日期
,A.CHANNEL_NAME 支局名称
FROM 表1 A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_ID
WHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=20150910 AND A.OWE_MONTH =201508 AND B.ACCT_MONTH=201508
GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH

虽然这个脚本可以提取一天的欠费数据,那么问题来了,如果你要提取9月1日到10的欠费数据,那不是要执行这个脚本十次么?


当然这里有更好的方法来提取欠费数据,那就是将该段SQL脚本写成PostgreSQL过程语言,然后只需要执行自定义的函数就可以提取十天的欠费数据了,这样大大的提高了自己的工作效率。


最后给出改进后的PostgreSQL过程语言函数以及postgresqlAPI的pdf文件(中文版本额!):


?
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
函数名wx_qf_hdb(统计日期,01508);? 格式: wx_qf_hdb(20150901,201508);
功能:提取目前欠费帐龄截止统计日期的各支局欠费回收总数
*/
--start
CREATE FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric) RETURNS TEXT AS $$
DECLARE
LS_SQL???????? VARCHAR(5000);
today????????? VARCHAR(8);
qf_month??????? VARCHAR(6);
month_l??????? INTEGER;
num??????????? numeric;
BEGIN
today := TRIM(to_char(day_id,99999999));--截止日期转为字符串
qf_month := TRIM(to_char(acct_month,999999));--欠费月份转为字符串
num := to_number(substr(today,1,6),999999);--区字符串的前6位
month_l := to_date(to_char(day_id+1, '9999-99-99' ),monospace!important; font-size:1em!important; min-height:inherit!important; color:blue!important; background:none!important">'yyyy-mm-dd' )-to_date(to_char(num,monospace!important; font-size:1em!important; min-height:inherit!important; color:blue!important; background:none!important">'9999-99' )|| '-01' );--计算当月天数
FOR i IN 1..month_l LOOP
???? LS_SQL := 'create table temp_wuxi_qf' ||i|| ' as
SELECT DISTINCT
A.DAY_ID?? 统计日期
,A.CHANNEL_NAME 支局名称
FROM 表1A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_ID
WHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=' ||to_char(day_id-month_l+i,99999999)|| ' AND A.OWE_MONTH =' ||qf_month|| ' AND B.ACCT_MONTH=' '
GROUP BY A.DAY_ID,A.OWE_MONTH' ;
EXECUTE LS_SQL;
END LOOP;
--提取日数据
' as ' ;
FOR i IN 1..month_l LOOP
LS_SQL := LS_SQL|| 'SELECT * FROM temp_wuxi_qf' ' UNION ' ;
END LOOP;
||month_l;
EXECUTE LS_SQL;
--汇总日数据
FOR i IN 1..month_l LOOP
LS_SQL:= 'DROP TABLE temp_wuxi_qf' ||i;
EXECUTE LS_SQL;
END LOOP;
--删除所有临时表
RETURN LS_SQL;
END;
$$ LANGUAGE plpgsql;
--end
select wx_qf_hdb(20150903,201508); --运行函数wx_qf_hdb(统计日期,欠费帐期)
DROP FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric); --删除函数
select * from temp_wuxi_qf欠费帐期;--查询表
drop table temp_wuxi_qf欠费帐期; -- 删除表

http://pan.baidu.com/s/1mg09t5Q(PostgreSQLAPI文件下载


有兴趣的朋友可以自己试着去研究下PostgreSQL过程语言函数,真的对长期从事提取数据的朋友们帮助很大


本文来至贪玩小神个人博客,转载请说明出处,网址:www.twxiaoshen.com??谢谢!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读