0

特定の期間に2つの情報を取得していますが、1つのタグの1日の平均と、別のタグの1日のカウントを取得したいと思います。特定の期間の1日の平均を計算する方法がわかりませんが、誰かアドバイスをいただけますか?以下は、これを処理する方法についての私の最初のアイデアでしたが、すべての日付を変更するのは面倒です。助けていただければ幸いです

SELECT COUNT(distinct chargeno), to_char(chargetime, 'mmddyyyy')  AS chargeend 
FROM batch_index WHERE plant=1 AND chargetime>to_date('2012-06-18:00:00:00','yyyy-mm-dd:hh24:mi:ss') 
AND chargetime<to_date('2012-07-19:00:00:00','yyyy-mm-dd:hh24:mi:ss')
group by chargetime;

The working version of the daily sum
SELECT to_char(bi.chargetime, 'mmddyyyy') as chargtime, SUM(cv.val)*0.0005 
FROM Charge_Value cv, batch_index bi WHERE cv.ValueID =97
AND bi.chargetime<=to_date('2012-07-19','yyyy-mm-dd')
AND bi.chargeno = cv.chargeno AND bi.typ=1
group by to_char(bi.chargetime, 'mmddyyyy')
4

2 に答える 2

2

最初のものでは、グループを時間ではなく日に変更したいようです...(さらに、これらすべての0を秒で指定する必要はないと思います..)

SELECT COUNT(distinct chargeno), to_char(chargetime, 'mmddyyyy')  AS chargeend 
FROM batch_index WHERE plant=1 AND chargetime>to_date('2012-06-18','yyyy-mm-dd') 
AND chargetime<to_date('2012-07-19','yyyy-mm-dd')
group by to_char(chargetime, 'mmddyyyy') ;
于 2012-07-19T19:34:57.180 に答える
0

100% ではありませんが、私はあなたの質問に従っていますが、集計 (合計、平均) だけを実行したい場合は、それを実行してください。それがあなたが探していたものである場合に備えて、ロールアップを入れました

with  fakeData as(
  select trunc(level *.66667) nr 
      , trunc(2*level * .33478) lvl --these truncs just make the doubles ints
      ,trunc(sysdate+trunc(level*.263784123)) dte --note the trunc, this gets rid of the to_char to drop the time
  from dual
connect by level < 600
) --the cte is just to create fake data
--below is just some aggregates that may help you
select sum(nr) daily_sum_of_nr
     , avg(nr) daily_avg_of_nr
     , count(distinct lvl) distinct_lvls_per_day
     , count(lvl) count_of_nonNull_lvls_per_day
     , dte days
  from fakeData
 group by rollup(dte)

-- クエリで範囲の合計を提供する場合は、ロールアップ ( http://psoug.org/reference/rollup.html )を使用できます。

于 2012-07-19T20:00:06.853 に答える