交互式查询计算

来源:互联网 发布:安装ubuntu后花屏 编辑:程序博客网 时间:2024/05/20 09:46
        针对现有数据库查询计算是决策支持的基础,交互式查询是终端用户的最基本需求,准确完备的检索条件可以更好地帮助用户从数据库获取最需要的信息。

       目前,交互式查询的解决方案主要有两种:

       一、实现交互式查询运算的工具,最通用的就是通过SQL语句,直接由数据库查询。但是,使用SQL或者是存储过程查询,会遇到种种困难。首先,用户必须掌握数据库的结构,了解各个表的名称与相互关系,而这些信息一般只有数据库管理员才有权限获知。其次,SQL作为通用查询语言,处理复杂计算的难度很大:在使用SQL进行程序化的计算时,或者无法计算,或者要写出一长串非常复杂、难以理解的复杂语句。

        二、进行交互式查询运算,也可以通过直接编写程序来实现。但是和使用SQL相比难度更高,工作量更大。同时,程序编写完成后不易修改,如果业务逻辑发生变化,或者临时遇到新的计算任务,都不能及时处理。

有时候,我们需要根据数据库中琐碎的原始数据,分析计算出一些有帮助的信息,比如:

  • 一个月内发生过连续三个交易日涨幅达到期望值的股票?
  • 总销售额占到一半的前n个客户?
  • 超市中一个月内下午5点断档超过3次的商品?
  • 同一用户购买iPhone后再次购买iPad的平均间隔时间?
  • 一年中有连续三个月发生电话欠费的用户?
  • ……

       如果用SQL来处理这些问题,都需要使用复杂的嵌套语句才能查询,需要比较强的技术能力才能完成,而且这样的SQL语句晦涩难读。而编写程序的方式,并不适于处理这类灵活性很强的问题。

      esProc可以很好的完成这种工作,可以通过少量代码,实现各种复杂的数据运算。

      比如,如何从某交易所一个月的股票交易数据中,找出连续三个交易日涨幅超过3%的股票?

       将交易记录按照代码ISIN和交易日期Date进行排序,然后按照ISIN进行分组。此时,一支股票的涨幅,可以简化为收盘价与上个交易日相比较的涨幅;只需找出连续三个交易日涨幅大于0.03的股票。

       在esProc中进行查询,可以分步进行,每一步的目的明确、易于查看。经过计算,在A7中,找出连续三个交易日涨幅超过0.03的分组:

      可以双击查看分组中的具体记录:

      在A8中,只列出满足要求的股票的序号ISIN:

      除了这种方法之外,也可以计算出每一支股票涨幅超过0.03的最大连续天数再进行筛选:

       在esProc中,格子中的计算结果可以在需要时轻松调用,这对需要分步进行的计算十分有益。在A10中,就再次利用了A5中的数据,计算出每支股票涨幅超过0.03的最大连续天数。A11中再找出连续天数大于等于3天的股票的代码ISIN,其结果和A8是相同的:

     在esProc中,可以对数据进行排序、添加字段、分组、过滤、累加等等各种操作,来出色地完成复杂的交互式查询计算。