龙空技术网

数据库查询历史同期和总计脚本

蚂蚁不吃米 8

前言:

而今咱们对“oracle查询数据库数据总量”都比较注重,兄弟们都需要知道一些“oracle查询数据库数据总量”的相关文章。那么小编在网摘上网罗了一些对于“oracle查询数据库数据总量””的相关资讯,希望兄弟们能喜欢,各位老铁们快快来学习一下吧!

一、需求1. 需求背景

需求一:统计当前及历史同期业务量并在一个字段内展示;

需求二:统计指定时间段内业务总量;

2. 最终效果展示2.1 模拟表的表结构

本文以水果销量模拟真实的业务量

2.2 当前及历史同期效果展示

统计近7天内和历史同期各水果销量

2.3 某时间段内总计效果展示

统计2019年全年各水果销量总计

二.脚本1. 当前及历史同期脚本

#!/usr/bin/ksh​#运行示例:sh fru_calc_day.sh​#本脚本用于统计每日及同期历史的水果销量​#统计时间从前D1天开始,默认为7,即统计从7天前开始D1=7#统计时间到前D2天,默认为1,即截止到前一天D2=1#历史数据,默认为12,即前12个月(去年)M=12​#日志时间格式filedate=`date +"%Y%m%d%H%M"`#日志名REPORT="/tmp/fru/report$filedate.log"​#数据库用户名/密码,根据实际情况填写DBUSER=dbuserDBPASSWD=password​#数据库环境变量,根据实际情况填写export ORACLE_SID=mydbexport ORACLE_BASE=/oracle/app/10.2.0export ORACLE_HOME=$ORACLE_BASE/db_1export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATHexport NLS_LANG="SIMPLIFIED Chinese_CHINA.ZHS16GBK"​​FRU_CALC() {echo "***************************每日水果销量统计***************************">> $REPORTsqlplus -s /nolog << EOS | sed '1d' | sed '/rows selected/d'conn $DBUSER/$DBPASSWDset linesize 999set pages 999col 日期 format a30col 苹果(历史同期) format a30col 梨子(历史同期) format a30col 香蕉(历史同期) format a30col 橙子(历史同期) format a30select f.day as "日期",       f.app as "苹果(历史同期)",       f.pea as "梨子(历史同期)",       f.ban as "香蕉(历史同期)",       f.ora as "橙子(历史同期)"  from (select t.day,               t.app || '(' || y.app || ')' as app,               t.pea || '(' || y.pea || ')' as pea,               t.ban || '(' || y.ban || ')' as ban,               t.ora || '(' || y.ora || ')' as ora          from (select a.day,                       a.apple as app,                       a.pear as pea,                       a.banana as ban,                       a.orange as ora                  from fruits a                 where a.day between TRUNC(sysdate - $D1, 'DD') and                       TRUNC(sysdate - $D2, 'DD')) t,               (select a.day,                       a.apple as app,                       a.pear as pea,                       a.banana as ban,                       a.orange as ora                  from fruits a                 where a.day between                       TRUNC(ADD_MONTHS(sysdate, -$M) - $D1, 'DD') and                       TRUNC(ADD_MONTHS(sysdate, -$M) - $D2, 'DD')) y         where ADD_MONTHS(t.day, -$M) = y.day) forder by f.day;quitEOS}​FRU_CALC >>$REPORT 2>&1​echo "*****************************end*****************************">> $REPORT

本文脚本的执行shell为/usr/bin/ksh,可根据实际情况修改,运行命令echo $SHELL可查看当前用户的shell类型。

2. 某时间段内总计脚本

#!/usr/bin/ksh​#运行示例:sh  fru_calc_sum.sh 20190101 20191231#本脚本用于统计月度、年度或任意时间段内水果销量汇总​#参数1,开始时间startdate="$1"#参数2,结束时间enddate="$2"​#日志时间格式filedate=`date +"%Y%m%d%H%M"`#日志名REPORT="/tmp/fru/report$filedate.log"​#数据库用户名/密码,根据实际情况填写DBUSER=dbuserDBPASSWD=password​#数据库环境变量,根据实际情况填写export ORACLE_SID=mydbexport ORACLE_BASE=/oracle/app/10.2.0export ORACLE_HOME=$ORACLE_BASE/db_1export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATHexport NLS_LANG="SIMPLIFIED Chinese_CHINA.ZHS16GBK"​​​FRU_CALC() {echo "***********历史水果销量总计:'$startdate'至'$enddate'***********">> $REPORTsqlplus -s /nolog << EOS | sed '1d' | sed '/rows selected/d'conn $DBUSER/$DBPASSWDset linesize 999set pages 999select sum(f.app) as "苹果",       sum(f.pea) as "梨子",       sum(f.ban) as "香蕉",       sum(f.ora) as "橙子"  from (select a.day,               sum(a.apple) as app,               sum(a.pear) as pea,               sum(a.banana) as ban,               sum(a.orange) as ora          from fruits a         where a.day between to_date('$startdate', 'yyyymmdd') and               to_date('$enddate', 'yyyymmdd')         group by a.day) f;quitEOS}​FRU_CALC >>$REPORT 2>&1​echo "*****************************end*****************************">> $REPORT

统计20190101至 20191231水果销量汇总。

三、运行效果1. 当前及历史同期查询2. 某时间段内总计查询

本文所有脚本已上传github:

标签: #oracle查询数据库数据总量