4
4

2 に答える 2

2

とを計算するための個別のクエリが10DayTotalVolumeあり10DayAvgVolumeます。1つのクエリqry10DayVolumesで両方を計算できると思います。

SELECT
    b.SYMBOL,
    Sum(b.VOLUME) AS 10DayTotalVolume,
    Avg(b.VOLUME) AS 10DayAvgVolume
FROM
    [tbl-B] AS b INNER JOIN
    qryLast10DaysStored AS q
    ON b.TIMESTAMP = q.TIMESTAMP
GROUP BY b.SYMBOL;

10DayAvgVolumeしかし、それは私に他の何かになることができるかどうか疑問に思います10DayTotalVolume / 10

同様の考慮事項が15日と30日の値に適用されます。

最終的には、次のような開始点に基づいたものが必要だと思います。

SELECT
    q10.SYMBOL,
    q10.[10DayTotalVolume],
    q10.[10DayAvgVolume],
    q15.[15DayTotalVolume],
    q15.[15DayAvgVolume],
    q30.[30DayTotalVolume],
    q30.[30DayAvgVolume]
FROM
    (qry10DayVolumes AS q10
    INNER JOIN qry15DayVolumes AS q15
    ON q10.SYMBOL = q15.SYMBOL)
    INNER JOIN qry30DayVolumes AS q30
    ON q10.SYMBOL = q30.SYMBOL;

これは、私が提案したアプローチを作成qry15DayVolumesし、それに従っていることを前提としています。qry30DayVolumesqry10DayVolumes

クエリの数を減らしたい場合は、qry??DayVolumes保存されたクエリごとにサブクエリを使用できますが、最初にこの方法を試して、ロジックが正しいことを確認してください。

上記の2番目のクエリでは、数字で始まるフィールド名が原因で問題が発生する可能性があります。これらの名前を角かっこで囲むか、、で再エイリアスしqry10DayVolumes、数字ではなく文字で始まるエイリアス名を使用しますqry15DayVolumesqry30DayVolumes

アップロードした「 2ndUpload.mdb 」を使用して上記のクエリをテストしたところ、 Access2007からエラーなしで実行されました。そのクエリの結果セットの最初の行は次のとおりです。

SYMBOL 10DayTotalVolume 10DayAvgVolume 15DayTotalVolume 15DayAvgVolume   30DayTotalVolume 30DayAvgVolume
ACC-1             42909         4290.9            54892 3659.46666666667            89669 2988.96666666667
于 2012-10-24T19:20:02.720 に答える
1

Accessは最先端のSQL構文と句をサポートしていないため、これはちょっとしたハックですが、機能し、小さなサンプルでは高速です。基本的に3つのクエリを実行していますが、Union句を使用すると1つに組み合わせることができます。

select
   Symbol,
   sum([10DayTotalVol]) as 10DayTotalV,
   sum([10DayAvgVol]) as 10DayAvgV,
   sum([15DayTotalVol]) as 15DayTotalV,
   sum([15DayAvgVol]) as 15DayAvgV,
   sum([30DayTotalVol]) as 30DayTotalV,
   sum([30DayAvgVol]) as 30DayAvgV

from (

      select
        Symbol, 
        sum(volume) as 10DayTotalVol, avg(volume) as 10DayAvgVol,
        0 as 15DayTotalVol, 0 as 15DayAvgVol,
        0 as 30DayTotalVol, 0 as 30DayAvgVol
      from
         [tbl-b]
      where
         timestamp >= (select min(ts) from (select distinct top 10 timestamp as ts from [tbl-b] order by timestamp desc ))
      group by
         Symbol   

      UNION

      select
        Symbol, 
        0, 0,
        sum(volume), avg(volume),
        0, 0
      from
         [tbl-b]
      where
         timestamp >= (select min(ts) from (select distinct top 15 timestamp as ts from [tbl-b] order by timestamp desc ))
      group by
         Symbol    

      UNION

      select
        Symbol, 
        0, 0,
        0, 0,
        sum(volume), avg(volume)
      from
         [tbl-b]
      where
         timestamp >= (select min(ts) from (select distinct top 30 timestamp as ts from [tbl-b] order by timestamp desc ))
      group by
         Symbol 
      ) s

group by 
   Symbol
于 2012-10-24T22:20:22.043 に答える