数据处理之PostgreSQL过程语言学习
前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市。发现使用PostgreSQL过程语言可以大大加快自己处理数据的效率,下面就举个例子吧!相信大家看了后,也会喜欢上PostgreSQL过程语言的.......
首先给出一段SQL脚本,该SQL查询2015年9月10日的欠费数据:
|
1
2
3
4
5
6
7
8
9
|
SELECT DISTINCTA.DAY_ID 统计日期,A.CHANNEL_NAME 支局名称,A.OWE_MONTH 欠费账期,SUM(B.current_charge) 日回收FROM 表1 A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_IDWHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=20150910 AND A.OWE_MONTH =201508 AND B.ACCT_MONTH=201508GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH |
虽然这个脚本可以提取一天的欠费数据,那么问题来了,如果你要提取9月1日到10的欠费数据,那不是要执行这个脚本十次么?
当然这里有更好的方法来提取欠费数据,那就是将该段SQL脚本写成PostgreSQL过程语言,然后只需要执行自定义的函数就可以提取十天的欠费数据了,这样大大的提高了自己的工作效率。
最后给出改进后的PostgreSQL过程语言函数以及postgresqlAPI的pdf文件(中文版本额!):
最后给出改进后的PostgreSQL过程语言函数以及postgresqlAPI的pdf文件(中文版本额!):
|
1
2
3
4
5
6
7
8
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);功能:提取目前欠费帐龄截止统计日期的各支局欠费回收总数*/--startCREATE FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric) RETURNS TEXT AS $$DECLARELS_SQL VARCHAR(5000);today VARCHAR(8);qf_month VARCHAR(6);month_l INTEGER;num numeric;BEGINtoday := 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'),'yyyy-mm-dd')-to_date(to_char(num,'9999-99')||'-01','yyyy-mm-dd');--计算当月天数FOR i IN 1..month_l LOOP LS_SQL := 'create table temp_wuxi_qf'||i||' as SELECT DISTINCTA.DAY_ID 统计日期,A.CHANNEL_NAME 支局名称,A.OWE_MONTH 欠费账期,SUM(B.current_charge) 日回收FROM 表1A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_IDWHERE 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='||qf_month||'GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH'; EXECUTE LS_SQL;END LOOP;--提取日数据LS_SQL := 'create table temp_wuxi_qf'||qf_month||' as ';FOR i IN 1..month_l LOOP LS_SQL := LS_SQL||'SELECT * FROM temp_wuxi_qf'||i||' UNION ';END LOOP;LS_SQL := LS_SQL||'SELECT * FROM temp_wuxi_qf'||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;--endselect 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过程语言函数,真的对长期从事提取数据的朋友们帮助很大
数据处理之PostgreSQL过程语言学习的更多相关文章
- 开始我的PostgreSQL的学习之旅
经过这么长时间的学习,终于确定了我的研究方向是PostgreSQL的空间数据库的设计流程,具体怎样实现这个过程,其难度是挺大的,我必须克服掉,尽量得往前看.大家有相同的研究方向的,可以一同来学习,相互 ...
- droplang - 删除一种 PostgreSQL 过程语言
SYNOPSIS droplang [ connection-option...] langname [ dbname] droplang [ connection-option...] --list ...
- postgresql数据库学习-win平台下SQLshell基础操作及语法
由于在学习https://www.bilibili.com/video/av24590479小马视频时, up主采用的linux虚拟机进行教学, 而本人采用window7进行操作,故在基础操作和语法上 ...
- Mysql与PostgreSql数据库学习笔记---打酱油的日子
mysql 从最基础的数据引擎,到进程结构,都不能支持数据版本.导致其职能阻塞“并发”,不支持最基本的事务,innodb达不到基本事务要求,任何写数据,都导致整个表锁住.充其量只能算是一个玩具,或者说 ...
- Storm的数据处理编程单元:Bolt 学习整理
Bolt是Topology中的数据处理的单元,也是Storm针对处理过程的编程单元.Topology中所有的处理都是在这些Bolt中完成的,编程人员可以实现自定义的处理过程,例如,过滤.函数.聚集.连 ...
- 6.1Python数据处理篇之pandas学习系列(一)认识pandas
目录 目录 (一)介绍与测试 2.作用: 3.导入的格式 4.小测试 (二)数据类型 1.两种重要的数据类型 2.pandas与numpy的比较 目录 (一)介绍与测试 号称处理数据与分析数据最好的第 ...
- PostgreSQL参数学习:deadlock_timeout
磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@g ...
- PostgreSQL参数学习:wal_keep_segments
http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 参考官方文档: wal_keep_segments ...
- PostgreSQL参数学习:vacuum_defer_clean_age
官方文档: http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 为了防止slave端读取数据时,因为读到 ...
随机推荐
- 优化MySchool数据库设计
第一章 数据库的设计 1.E-R图中: 矩形:实体 椭圆:属性 菱形:关系 直线:连接实体,属性和关系 2.映射基数 一对多 多对一 多对多 3.范式: 第一范式:确保每列的原子性 第二范式:确保表中 ...
- [WCF编程]10.操作:流操作
一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...
- C#知识点-委托
一.什么是委托 委托和类一样,是一种用户自定义类型: 类表示的是数据和方法的集合,而委托则持有一个或多个方法: 二.委托的使用 1.声明委托类型 委托是类型,与类一样,委托类型必须在被用来创建变量以及 ...
- Sql server函数的学习1(系统变量、错误函数、转换函数)
一.系统变量的介绍和使用 1.@@ERROR 变量 2.@@SERVICENAME 变量 3.@@TOTAL_ERRORS 变量 4.@@TOTAL_READ 变量 5.@@VERSION 变量 二. ...
- Git避免输入用户名和密码
1. 在系统盘/用户/用户名目录下新建名为 _netrc 的文件: 2. 修改 _netrc 文件内容为“ machine git.mangning.comlogin xxxpassword xxx ...
- P2P核心业务体系
看似一个简单的充值.提现按钮,背后可是巨多的逻辑和业务处理.
- Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题
回到目录 Lind.DDD.Utils.HttpHelper组件主要实现了对HTTP的各种操作,如Get,Post,Put和Delete,它属于最纯粹的操作,大叔把它封装的目的主要为了实现与API安全 ...
- 3、ASP.NET MVC入门到精通——Entity Framework增删改查
这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"( ...
- 浅谈RecyclerView(完美替代ListView,GridView)
Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用. 个人体验来说,RecyclerView绝对是一款功能强大的控件. 首先总结下Recycl ...
- Dagger2 (一) 入坑篇
为什么是Dagger2 为了更好的了解Dagger2,请先阅读RoboGuice篇了解依赖注入. 官方文档称,依赖注入这种技术已经在存在多年了,为什么Dagger2要造轮子? Dagger2是第一个全 ...