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
し、それに従っていることを前提としています。qry30DayVolumes
qry10DayVolumes
クエリの数を減らしたい場合は、qry??DayVolumes
保存されたクエリごとにサブクエリを使用できますが、最初にこの方法を試して、ロジックが正しいことを確認してください。
上記の2番目のクエリでは、数字で始まるフィールド名が原因で問題が発生する可能性があります。これらの名前を角かっこで囲むか、、で再エイリアスしqry10DayVolumes
、数字ではなく文字で始まるエイリアス名を使用しますqry15DayVolumes
。qry30DayVolumes
アップロードした「 2ndUpload.mdb 」を使用して上記のクエリをテストしたところ、 Access2007からエラーなしで実行されました。そのクエリの結果セットの最初の行は次のとおりです。
SYMBOL 10DayTotalVolume 10DayAvgVolume 15DayTotalVolume 15DayAvgVolume 30DayTotalVolume 30DayAvgVolume
ACC-1 42909 4290.9 54892 3659.46666666667 89669 2988.96666666667
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