查询数据库内历史同期和总计脚本的方法
admin
2023-02-03 03:00:03
0

查询数据库内历史同期和总计脚本的方法有哪些?为了让大家更加了解数据库,小编给大家总结了以下内容,一起往下看吧。

一、需求

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=dbuser
DBPASSWD=password

#数据库环境变量,根据实际情况填写
export ORACLE_SID=mydb
export ORACLE_BASE=/oracle/app/10.2.0
export ORACLE_HOME=$ORACLE_BASE/db_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export NLS_LANG="SIMPLIFIED Chinese_CHINA.ZHS16GBK"

FRU_CALC() {
echo "***************************每日水果销量统计***************************">> $REPORT
sqlplus -s /nolog << EOS | sed '1d' | sed '/rows selected/d'
conn $DBUSER/$DBPASSWD
set linesize 999
set pages 999
col 日期 format a30
col 苹果(历史同期) format a30
col 梨子(历史同期) format a30
col 香蕉(历史同期) format a30
col 橙子(历史同期) format a30
select 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) f
order by f.day;
quit
EOS
}

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=dbuser
DBPASSWD=password

#数据库环境变量,根据实际情况填写
export ORACLE_SID=mydb
export ORACLE_BASE=/oracle/app/10.2.0
export ORACLE_HOME=$ORACLE_BASE/db_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export NLS_LANG="SIMPLIFIED Chinese_CHINA.ZHS16GBK"

FRU_CALC() {
echo "***********历史水果销量总计:'$startdate'至'$enddate'***********">> $REPORT
sqlplus -s /nolog << EOS | sed '1d' | sed '/rows selected/d'
conn $DBUSER/$DBPASSWD
set linesize 999
set pages 999
select 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;
quit
EOS
}

FRU_CALC >>$REPORT 2>&1

echo "*****************************end*****************************">> $REPORT

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

三、运行效果

1. 当前及历史同期查询

查询数据库内历史同期和总计脚本的方法

2. 某时间段内总计查询

查询数据库内历史同期和总计脚本的方法

本文所有脚本已上传github:scripts-for-select-now-history-and-sum-from-db

关于查询数据库内历史同期和总计脚本的方法就分享到这里了,当然并不止以上和大家分析的办法,不过小编可以保证其准确性是绝对没问题的。希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。

相关内容

热门资讯

国际观察:中拉人工智能合作持续... 张冰倩 为进一步支持全球人工智能发展、推进全球人工智能能力建设,未来5年,中国将面向发展中国家提供5...
共商汽车产业全球合作新路径 G... 当前,汽车产业正加速向绿色化、智能化、国际化、融合化发展,汽车供应链受到大国竞争与地缘政治冲突扰动。...
内蒙古耕种收综合机械化率达91... 7月22日,记者从2026年中国农机推广田间日活动上获悉,内蒙古农作物耕种收综合机械化率达到91%,...
华为黄健:在算力、存力和运力三... 7月17日至20日,以“智能伙伴,共创未来”为主题的2026世界人工智能大会(WAIC)暨人工智能全...
苹果、谷歌都没留住月之暗面创始... 英国《金融时报》7月23日刊发评论《为什么美国正在失去中国人工智能明星?》,文章谈到,月之暗面(Mo...
陪伴大家十几年的充电宝,大概要... 要说这两年最尴尬的数码配件,托尼觉得充电宝绝对算一个。 以前它的对手还都是同行 —— 大家一起卷容量...
女子举报遭公安局一副支队长猥亵... 记者 商泽阳近日,安徽的薛女士向潮新闻记者反映,称其于2025年4月遭到时任亳州市公安局经侦支队副支...
邹市明妻子冉莹颖回应“债还完了... 2026年7月22日,综艺《姐姐当家2》播出的内容中,张泉灵就冉莹颖的婚姻状况提出犀利问题,引发关注...
美方指控中国人工智能企业抄袭,... 据凤凰卫视报道,美国白宫科技政策办公室主任克拉齐奥斯7月22日指控中国人工智能企业月之暗面在开发最新...
广西一公园大树倾倒3人身亡 近日,广西一公园大树倾倒,造成人员伤亡,引发关注。7月23日,玉林市博白县人民政府办公室工作人员对中...