溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法

發(fā)布時(shí)間:2020-03-24 11:40:25 來(lái)源:億速云 閱讀:219 作者:小新 欄目:系統(tǒng)運(yùn)維

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法有哪些?為了讓大家更加了解數(shù)據(jù)庫(kù),小編給大家總結(jié)了以下內(nèi)容,一起往下看吧。

一、需求

1. 需求背景

  • 需求一:統(tǒng)計(jì)當(dāng)前及歷史同期業(yè)務(wù)量并在一個(gè)字段內(nèi)展示;
  • 需求二:統(tǒng)計(jì)指定時(shí)間段內(nèi)業(yè)務(wù)總量;

2. 最終效果展示

2.1 模擬表的表結(jié)構(gòu)

本文以水果銷量模擬真實(shí)的業(yè)務(wù)量

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法

2.2 當(dāng)前及歷史同期效果展示

統(tǒng)計(jì)近7天內(nèi)和歷史同期各水果銷量

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法

2.3 某時(shí)間段內(nèi)總計(jì)效果展示

統(tǒng)計(jì)2019年全年各水果銷量總計(jì)

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法

二.腳本

1. 當(dāng)前及歷史同期腳本

#!/usr/bin/ksh

#運(yùn)行示例:sh fru_calc_day.sh

#本腳本用于統(tǒng)計(jì)每日及同期歷史的水果銷量

#統(tǒng)計(jì)時(shí)間從前D1天開(kāi)始,默認(rèn)為7,即統(tǒng)計(jì)從7天前開(kāi)始
D1=7
#統(tǒng)計(jì)時(shí)間到前D2天,默認(rèn)為1,即截止到前一天
D2=1
#歷史數(shù)據(jù),默認(rèn)為12,即前12個(gè)月(去年)
M=12

#日志時(shí)間格式
filedate=`date +"%Y%m%d%H%M"`
#日志名
REPORT="/tmp/fru/report$filedate.log"

#數(shù)據(jù)庫(kù)用戶名/密碼,根據(jù)實(shí)際情況填寫(xiě)
DBUSER=dbuser
DBPASSWD=password

#數(shù)據(jù)庫(kù)環(huán)境變量,根據(jù)實(shí)際情況填寫(xiě)
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 "***************************每日水果銷量統(tǒng)計(jì)***************************">> $REPORT
sqlplus -s /nolog << EOS | sed '1d' | sed '/rows selected/d'
conn $DBUSER/$DBPASSWD
set linesize 999
set pages 999
col 日期 format a30
col 蘋(píng)果(歷史同期) format a30
col 梨子(歷史同期) format a30
col 香蕉(歷史同期) format a30
col 橙子(歷史同期) format a30
select f.day as "日期",
       f.app as "蘋(píng)果(歷史同期)",
       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

本文腳本的執(zhí)行shell為/usr/bin/ksh,可根據(jù)實(shí)際情況修改,運(yùn)行命令echo $SHELL可查看當(dāng)前用戶的shell類型。

2. 某時(shí)間段內(nèi)總計(jì)腳本

#!/usr/bin/ksh

#運(yùn)行示例:sh  fru_calc_sum.sh 20190101 20191231
#本腳本用于統(tǒng)計(jì)月度、年度或任意時(shí)間段內(nèi)水果銷量匯總

#參數(shù)1,開(kāi)始時(shí)間
startdate="$1"
#參數(shù)2,結(jié)束時(shí)間
enddate="$2"

#日志時(shí)間格式
filedate=`date +"%Y%m%d%H%M"`
#日志名
REPORT="/tmp/fru/report$filedate.log"

#數(shù)據(jù)庫(kù)用戶名/密碼,根據(jù)實(shí)際情況填寫(xiě)
DBUSER=dbuser
DBPASSWD=password

#數(shù)據(jù)庫(kù)環(huán)境變量,根據(jù)實(shí)際情況填寫(xiě)
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 "***********歷史水果銷量總計(jì):'$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 "蘋(píng)果",
       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

統(tǒng)計(jì)20190101至 20191231水果銷量匯總。

三、運(yùn)行效果

1. 當(dāng)前及歷史同期查詢

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法

2. 某時(shí)間段內(nèi)總計(jì)查詢

查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法

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

關(guān)于查詢數(shù)據(jù)庫(kù)內(nèi)歷史同期和總計(jì)腳本的方法就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過(guò)小編可以保證其準(zhǔn)確性是絕對(duì)沒(méi)問(wèn)題的。希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI