前段时间,公司更换新的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 支局名称
,A.OWE_MONTH    欠费账期
,SUM(B.current_charge) 日回收
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文件(中文版本额!):

最后给出改进后的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);
功能:提取目前欠费帐龄截止统计日期的各支局欠费回收总数
*/
--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'),'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 DISTINCT
A.DAY_ID   统计日期
,A.CHANNEL_NAME 支局名称
,A.OWE_MONTH    欠费账期
,SUM(B.current_charge) 日回收
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='||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;
--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过程语言函数,真的对长期从事提取数据的朋友们帮助很大

 

数据处理之PostgreSQL过程语言学习的更多相关文章

  1. 开始我的PostgreSQL的学习之旅

    经过这么长时间的学习,终于确定了我的研究方向是PostgreSQL的空间数据库的设计流程,具体怎样实现这个过程,其难度是挺大的,我必须克服掉,尽量得往前看.大家有相同的研究方向的,可以一同来学习,相互 ...

  2. droplang - 删除一种 PostgreSQL 过程语言

    SYNOPSIS droplang [ connection-option...] langname [ dbname] droplang [ connection-option...] --list ...

  3. postgresql数据库学习-win平台下SQLshell基础操作及语法

    由于在学习https://www.bilibili.com/video/av24590479小马视频时, up主采用的linux虚拟机进行教学, 而本人采用window7进行操作,故在基础操作和语法上 ...

  4. Mysql与PostgreSql数据库学习笔记---打酱油的日子

    mysql 从最基础的数据引擎,到进程结构,都不能支持数据版本.导致其职能阻塞“并发”,不支持最基本的事务,innodb达不到基本事务要求,任何写数据,都导致整个表锁住.充其量只能算是一个玩具,或者说 ...

  5. Storm的数据处理编程单元:Bolt 学习整理

    Bolt是Topology中的数据处理的单元,也是Storm针对处理过程的编程单元.Topology中所有的处理都是在这些Bolt中完成的,编程人员可以实现自定义的处理过程,例如,过滤.函数.聚集.连 ...

  6. 6.1Python数据处理篇之pandas学习系列(一)认识pandas

    目录 目录 (一)介绍与测试 2.作用: 3.导入的格式 4.小测试 (二)数据类型 1.两种重要的数据类型 2.pandas与numpy的比较 目录 (一)介绍与测试 号称处理数据与分析数据最好的第 ...

  7. PostgreSQL参数学习:deadlock_timeout

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页    回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@g ...

  8. PostgreSQL参数学习:wal_keep_segments

    http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 参考官方文档: wal_keep_segments ...

  9. PostgreSQL参数学习:vacuum_defer_clean_age

    官方文档: http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 为了防止slave端读取数据时,因为读到 ...

随机推荐

  1. redis主从复制 从而 数据备份和读写分离

    蜗牛Redis系列文章目录http://www.cnblogs.com/tdws/tag/NoSql/ 爬虫转载注明地址本文地址—博客园蜗牛 http://www.cnblogs.com/tdws/p ...

  2. 创建javaScript对象的方法

    一.工厂模式 function person (name,age) { var p=new Object(); p.name=name; p.age=age; p.showMessage=functi ...

  3. 用python来个百度关键词刷排名脚本

    目的:写个脚本来提升百度排名 我一个seo届前辈的朋友找我,他说,seo事无巨细,自己主观方面能做的几乎都能做了,提升百度等搜索引擎中的排名往往效果不佳或者起效周期慢.能不能人为去干预下呢? 获得排名 ...

  4. CSS笔记之伪类与伪元素

    伪类分为两种:UI伪类 与 结构化伪类 UI伪类:a:link{}    a:hover{}   a:active{}  a:visited{} input[type='text']:focus{} ...

  5. mysql 添加索引 mysql 创建索引

    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...

  6. 【转载】Oracle递归查询:使用prior实现树操作【本文出自叶德华博客】

    本文标题:Oracle递归查询:使用prior实现树操作 本文链接:http://yedward.net/?id=41 本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处. Oracle ...

  7. SharePoint 客户端对象模型共用ClientContext的坑

    首先请看代码 private static void Main(string[] args) { Test2(); } private static void Test2() { var client ...

  8. C++序列化、反序列化

    几个常见的库 http://stackoverflow.com/questions/3637581/fastest-c-serialization Boost: Fast, assorted C++ ...

  9. iOS中的交换空间(swap space)

    看来是没有交换空间,原因是闪存和SSD硬盘相比,速度很慢,也有电源管理的原因. the NAND flash is not designed to be used as swap. It is dam ...

  10. 【代码笔记】iOS-UITextField设置placeholder颜色

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...