数据处理之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端读取数据时,因为读到 ...
随机推荐
- jQuery 判断是否包含某个属性
1.Get the attribute, check the value var attr = $(this).attr('name'); // For some browsers, `attr` i ...
- authorization与URL授权
利用Web.config中的authorization标签设置授权属于URL授权. 使用 URL 授权 通过 URL 授权,您可以显式允许或拒绝某个用户名或角色对特定目录的访问权限.为此,请在该目录的 ...
- [WCF编程]4.契约概述
一.契约的基本概念 契约是消息参与者之间的约定.在SOA架构中,契约提供了服务通信所必需的元数据.契约用来定义数据类型,操作,消息交换模式和消息交换使用的传输协议.契约通常是在标准化平台中使用与编程语 ...
- 从零开始学Python08作业源码:开发简单的FTP(仅供参考)
服务器端:server_server.py #!usr/bin/env python # -*- coding:utf-8 -*- # auther:Mr.chen # 描述: import sock ...
- Python默认版本修改
Python默认版本修改 当电脑安装了多个版本的Python,而Shell中默认的Python不是你想要的,这个时候就需要对Python的默认版本进行修改. 在Windows中,可以通过修改环境变量的 ...
- linux下c程序的链接、装载和库(2)
5. 重定义错误. 一个最终的可执行文件里,绝对不允许出现两个同名的全局变量,也不允许出现同名的全局函数. 全局函数:只要不用 static 修饰符修饰的函数,全部都是全局的. 全局变量:函数外声明定 ...
- Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)
1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...
- 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践
参考高性能javascript 理解浏览器UI线程 用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程 UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...
- Atitit.常见软件 数据 交换格式 标准
Atitit.常见软件 数据 交换格式 标准 1. 常见的数据格式txt ,doc ,pic,music ,vodio1 2. 通用格式json yaml phpstr1 3. 专用格式1 4. 用户 ...
- Solr 4.0 部署实例教程
Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...