• ベストアンサー

Access グループ毎で直近25件分で移動平均を出したいのですが

例えば表名[株価推移]の項目に、[銘柄番号][日付(mmdd)][株価]とある場合。 銘柄毎、日付毎の株価の平均を出すのであれば、 SELECT [銘柄番号],[日付(mmdd)],AVG([日付(mmdd)]) FROM [株価推移] GROUP BY [銘柄番号],[日付(mmdd)]; で求まるのですが、直近の25件分での移動平均となると どのようにすればよいか分かりません。 どなたか、教えていただけませんか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

>一年間(1月~12月)の推移傾向が知りたいのでmmddにしています。 じゃ異なる年のものは含まれていないとして進めますね >抜けはありますが、重複はありません。 ということなので日付の順番で連番を振り 該当レコードより25以前のもののみの合計を取ります クエリを2段に使います 1つ目のクエリで銘柄番号毎に日付順に連番を振ります 連番: DCount("*","株価推移","日付<='" & [日付] & "' and 銘柄番号='" & 銘柄番号 & "'") このクエリから移動平均を求めるクエリを作ります (移動平均は日付じゃなく株価ですよね) 移動平均: DSum("株価","クエリ名","連番 between '" & IIf([連番]-24<1,0,[連番]-24) & "' And '" & [連番] & "' and 銘柄番号='" & 銘柄番号 & "'")

hana_taro
質問者

お礼

まさに考えていたとおりの結果を出せました。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

日付がmmddでは年をまたぐ処理が出来ないですよ それと日付には重複や抜けはあるのでしょうか

hana_taro
質問者

補足

>日付がmmddでは年をまたぐ処理が出来ないですよ 一年間(1月~12月)の推移傾向が知りたいのでmmddにしています。 >それと日付には重複や抜けはあるのでしょうか 抜けはありますが、重複はありません。 他に足りない所がありましたら、また質問してください。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access グループ毎に最新25件分で平均を出したいのですが

    例えば表の項目に、[種別][日付][数]とあり、[種別]の設定値は重複可の場合。 種別毎の数の平均を出すのであれば、 SELECT [種別],AVG([数]) FROM 表名 GROUP BY [種別]; でOKですが、種別毎に最新の25件分で平均となると どのようにすればよいか分かりません。 どなたか、教えていただけませんか。 よろしくお願いいたします。

  • 移動平均値のSQL

    お世話になります。 株価の移動平均値、例えば5日の移動平均値をSQL文で求めたいと思っています。 +----------+-------+ | ymd | value | +----------+-------+ | 19960401 | 21100 | | 19960402 | 21200 | | 19960403 | 21200 | | 19960404 | 21800 | | 19960405 | 21900 | | 19960408 | 21500 | | 19960409 | 22000 |  ・・・ | 20070510 | 2570 | | 20070511 | 2545 | | 20070514 | 2530 | | 20070515 | 2555 | | 20070516 | 2545 | | 20070517 | 2450 | +----------+--------+ 例えば、1996/4/5時点の5日移動平均値は、 | 19960401 | 21100 | | 19960402 | 21200 | | 19960403 | 21200 | | 19960404 | 21800 | | 19960405 | 21900 | (21100+21200+21200+21800+21900)/5=21440 となります。 5日毎にgroup byする方法を見つけるかと考えましたが、今のところ見つけられません。 銘柄毎に2000件データ×4000銘柄分あります。 今回は1銘柄のみの考慮、つまり、日付と株価のみでの考慮をお願いしたいと思っております。 下記にありますサンプルのデータでありますと、19960405,19960408,19960409の3日に関して移動平均値が出る結果となります。 よろしくお願いいたします。 MySQLバージョン 5.0.37 Windows2000 SP4 サンプル create table t_kabuka (ymd int(8), value int(6),primary key(ymd)); insert into t_kabuka values (19960401,21100), (19960402,21200), (19960403,21200), (19960404,21800), (19960405,21900), (19960408,21500), (19960409,22000);

    • ベストアンサー
    • MySQL
  • SQL の 質問

    ORACLE の SQLの質問です。 現在 名称  銘柄  単価 甘さ ビタミン りんご  , 1 , 50 , 5 , 5 りんご , 1 , 40 , 4 , 4 りんご , 1 , 30 , 3 , 3 りんご , 2 , 100 , 5 , 5 りんご , 2 , 80 , 4 , 4 りんご , 3 , 50 , 2 , 5 りんご , 3 , 40 , 2 , 4 メロン , 1 , 1000 , 10 , 3 というテーブル 果実 があり、りんごの 銘柄ごとの 平均単価、平均甘さ、平均ビタミンを 出したいんですが、 SELECT AVG(単価) AS 平均単価, AVG(甘さ) AS 平均甘さ, AVG(ビタミン) AS 平均ビタミン FROM 果実 WHERE 銘柄 = (SELECT DISTINCT 銘柄 FROM 果実) AND 名称 = ‘りんご’ ORDER BY 銘柄 というSQLを考えたのですが、どうしても、WHERE 句の後の銘柄のSQLで「式がありません。」のエラーが出てしまいます。できるだけ * ワイルドカードは使いたくないのですが、もし、どなたか、教えていただける方いましたら、ご教授ください。お願いいたします。

  • エクセルのグラフについて

    日経平均株価と個別銘柄の株価の推移を線グラフで表したく、具体的には、過去一年分の個別銘柄株価と日経平均株価を両方とも主軸で線グラフを作成したいのですが、双方の数字の桁が違うのでうまくいきません。縦軸目盛は個別銘柄の金額で表示させ、日経平均がどのように推移しているかということなんですが、、、。元データは、A列に日付、B列に個別銘柄株価、C列に日経平均株価としてます。説明がうまく出来ないのですが、よろしくご教授願います。

  • SQLがうまくいかない!

    SQLがうまくいかない! SQLについて、調べたんですが、わからないので教えてください! last_year(日付データ)関数 と round(日付データ,'書式')関数についてのご質問です。 select last_year('2007-01-01') from 表名; とやるとうまくいくのに 、 select round('2007-01-01','month') from 表名; とやるとエラーになってしまいます。 last_year関数では、'2007-01-01'は日付データとして扱われるのに、round関数では日付データとして扱われないのはなんででしょう? ちなみに、 select round(to_date('2007-01-01','yy-mm-dd'),'month') from 表名; とやるとうまくいきます・・・SQLの仕様ですか!? どなたか教えてください!宜しくお願い致します。

  • group by  0とnull値は、平均値の計算から省きたい

    行ないたいこと group by avgのSQLで、0とnull値は、平均値の計算から省きたい 各フィールドの平均値を出力したいのですが、 0とnullの値は、平均値の計算から省いて計算する必要があります。 (分母にカウントしません) 平均値を求めるフィールドが、1つだけなら、条件式を作成することが出来たのですが、同時に3つのフィールドの計算を求める必要があります。 環境:oracle10 -table hoge 日付, a , b, c 5/4 200,null,50 5/5 200,100,0 5/6 200,null,100 期待する値(各フィールドの平均値、だたし0とnullは分母から除外) a = (200+200+200)/3 = 200 b = 100/1 = 100 c = (50+100)/2 = 75 質問1. このようなSQLは実現可能でしょうか? 質問2. 実現可能であれば、ご教示いただきたいのですが… よろしくお願いいたします。

  • db2にて複数列の副照会を行いたい

    db2にて複数列の副照会を行いたい 会員番号の中で直近の利用日の明細を取得したい 例) SELECT 会員番号,利用日,利用目的,使用器具 FROM 明細テーブル      WHERE (会員番号,利用日) = (SELECT 会員番号,MAX(利用日) FROM 明細テーブル GROUP BY 会員番号) どなたかヒントをお願いします

  • Access 2000 サブクエリとJOIN

    Access2000でSQLを発行したのですが、 エラーが出てしまいます。 テーブル(仮にtest1、test2)があるとして test1 ------------------------- 主キー | 番号|項目    1|  1|りんご    2|  2|ぶどう    3|  3|みかん    4|  4|いちご test2 ----------------------------- 一つ目|二つ目| 1| 2| 4| 1| ・・・略 test2には2つのフィールドがあり、1,2,3,4を既定値として 入れるようにしています。 やりたいとこは、test2をグループ化し「一つ目」と「二つ目」 の規定値の個数(1、2、3、4)それぞれのカウントを求めたいのです。 一つのフィールドの場合は、 select * from test1 join test2 test1.番号=test2.一つ目 group by test1.番号 で求められたのですが、二つのフィールドをグループ化した際、 一つ目のフィールドと同じ個数が二つ目のフィールドにコピーされてしまうのです。 ですので、FROM句でサブクエリを結合しその中で、 group化したものを、いくつかのサブクエリと結合し てみたのですが、うまくいきませんでした。 select cnt1.一つ目,cnt2.二つ目 from (select * from test1 left join test2 on test1.番号=test2.一つ目group by test1.番号) as cnt1 left join (select * from test1 left join test2 on test1.番号=test2.二つ目group by test1.番号) as cnt2 on cnt1.番号=cnt2.番号 といった形で作ってみました。 エイリアスをつけてしまった時点でエラーが出ているので、 どうにもしようがありません。 申し訳ないのですが、ご教授のほどよろしくお願いいたします。

  • テーブルのマージSQLに関して

    初歩的なSQLの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 Aテーブル   社員番号、日付、内容、所属、時間、結果 Bテーブル  社員番号、日付、内容、理由  ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなUNIONを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? UNIONの場合、項目が異なるとエラーとなってしまうかと、、、 《UNIONのSQL》 SELECT * FROM ( SELECT 社員番号, 日付, 内容 FROM Aテーブル UNION SELECT 社員番号, 日付, 内容 FROM Bテーブル ) ORDER BY 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。

  • SQLServerでの書き方

    二つのテーブルをマージした後に、時間毎の平均値を取得したいのですが SQLServerではどのように書けばよろしいでしょうか? oracleだと↓こんな感じ select ti , avg(va) from ( select date as ti, value as va from test_table union all select date as ti, value as va from test1_table ) group by ti マージしたいテーブルを取得するSQL文をいじらずに実行できる方法を探しています。 以上、宜しくお願いします。