分析函数之初体验(一)——一道题目产生的兴趣

本来公司说是要做BI的,后来被改成了一个报表系统,失去了体验BI的机会,有些不爽。

报表系统是由顾问公司做,顾问公司说要看我们的SQL水平,给出了一份试题,其中有一题是这样的:





t_hykbgjl 记录了会员卡每次的发生额(nFse) 、余额(nYe)及卡号(sKH),对于同一会员卡,上一条记录的余额加上本次发生额应等于本次的余额。否则帐将不平。记录号为sJlbh,请写出列出所有会员卡不平帐记录的Sql语句。

从题目上分析,需要把上一行的余额拿下来进能计算,如果采用传统写法,可能需要很多的嵌套,一个表要查询很多次,由此想到了分析函数,在请教一神货之后,得知 
lag  函数可以把上一行某个字段的数据取下来,最终结果如下:


1 CREATE TABLE T_HYKBGJL
2 ( SKH VARCHAR2(20 BYTE),
3 NFSE NUMBER(12,4),
4 NYE NUMBER(12,4),
5 SJLBH NUMBER
6 );


insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000008‘,12,12,1);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000011‘,12,12,2);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘G0000000070‘,10,10,3);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘G0000000070‘,-2,8,4);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘G0000000070‘,6,19,5);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘G0000000070‘,-6,13,6);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000008‘,-2,10,7);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000008‘,3,13,8);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000011‘,-2,10,9);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000008‘,6,19,10);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000011‘,3,13,11);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000008‘,-9,10,12);
insert into t_hykbgjl(skh,nfse,nye,sjlbh) values(‘I0000000011‘,6,19,13);


1 select sjlbh, skh, nfse, nye, prev_ye, prev_ye + nfse
2 from (select sjlbh,
3 skh,
4 nfse,
5 nye,
6 lag(nye, 1, 0) over(partition by skh order by sjlbh) prev_ye
7 from t_hykbgjl)
8 where nye <> (prev_ye + nfse);

最终得出有差异的那行数据。

测试就这样提交了。由于顾问公司那边用的是SQL
Server数据库,与我所用的Oracle还是有区别,所以顾问公司那边最终给出的标准答案令我非常失望。

也是这道题目,让我对分析函数产生了前所未有的兴趣。

分析函数之初体验(一)——一道题目产生的兴趣,码迷,mamicode.com

时间: 2024-10-05 16:30:59

分析函数之初体验(一)——一道题目产生的兴趣的相关文章

分析函数之初体验(二)——环境

参考一本书上的讲解,实验环境使用的是oracle 11g的SH用户下的数据,在创建数据库时勾选"sample schema",默认会创建一系列的示例用户,包括scott/hr/sh/bi等,但这些用户中除了scott外,其它用户都没有数据,这需要用官方网站下载一个examples的压缩包,把这个包安装上之后,再进行数据导入才会有相应的数据. 安装简单,直接执行安装程序即可,麻烦的是在导入数据上,颇费一番周折. 安装完后,在/u01/oracle/app/oracle/product/1

Codeforces初体验

Codeforces印象 这两天抽时间去codeforces体验了一把. 首先,果然有众多大牛存在,很多名人一直参加每周一次的比赛,积分2000+,并参与出题. 另外,上面题目很多,估计至少一千题.比赛结束后,题目将转为练习题,可以持续尝试.每道题目都有标签,如greedy, math, matrices等等,可以点击相应的标签只做相关的题目.可惜我做了好几道之后才发现. 这次解决的题目 首次尝试,这次做的几个都是选的完成人数最多的,比较简单,但还是有些东西是从中新学习到的.以后最好分类练习.

Node.js 网页瘸腿爬虫初体验

延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require('fs'); // 创建一个将流数据写入文件的WriteStream对象 var outstream=fs.createWriteStream('./1.txt'); /

程序开发初体验

程序开发初体验 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 10 ? Estimate ? 估计这个任务需要多少时间 20 10 Development 开发 370 380 ? Analysis ? 需求分析 (包括学习新技术) 30 20 ? Design Spec ? 生成设计文档 60 20 ? Design Review ? 设计复审 10 10 ? Coding St

LINQ to Object初体验(使用对象取代二维数组作数据筛选)

VS2008里面有个神奇的东西,称之为LINQ,可以透过相同的语法方式来处理各式各样的数据(SQL,XML,Object,...),小喵此次初体验感受一下这个东西,真的很好用,初体验来做个简单的测试,请看小喵娓娓道来 VS2008里面有个神奇的东西,称之为LINQ,可以透过相同的语法方式来处理各式各样的数据(SQL,XML,Object,...),小喵此次初体验感受一下这个东西,真的很好用,初体验来做个简单的测试,请看小喵娓娓道来 先来看一张LINQ的架构图(数据来源:曹祖圣老师在TechEd2

erlang 初体验

最近测试了一下 erlang的坑... 如不出意外.... 大家第一眼看到这语法... 心里第一句一定是"我擦.这TM都是啥!!!!!" 没有变量!!! 没有结构体!!! 没有循环!!! 好吧,至少我是这样想的. 找了半天..连个if也不知道怎么写.. 这记录一些基本常识.. -module(module_name)  %%定义模块 括号内的要和文件名相同. -export([fun1/1 fun2/2]) %%这里是导出2个函数对外使用  函数名/参数名. 一个简单的函数定义如下 f

linux初体验

第一次听到linux这个'词语'是在一次偶然的朋友聊天中朋友提到的,之前压根没听到过'这个东西',所以我可以说是个linux的新新手,菜鸟都不算. 截至到目前,我已经开始linux系统运维学习有差不多10天时间了.在没接触linux之前,我对它的认识仅仅是:它是个计算机系统.决定学习linux系统运维之前,自我以为运维应该是对系统的一些日常维护之类的,不会很难的东西,我更希望运维是个不难的东西,我个人很笨,对难的东西可能接受的很慢,所以我愿意认为运维是很简单的,这样我就可以轻轻松松的掌握运维相关

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的