• ベストアンサー

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

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

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

これでどうかな? SELECT 種別, Avg(数) FROM 表名 WHERE 表名.日付 IN (SELECT TOP 25 日付 FROM 表名 AS 表名2 WHERE 表名.種別 = 表名2.種別 ORDER BY 日付 DESC) GROUP BY 種別; 相関副問い合わせです。

sinogoo
質問者

お礼

ありがとうございます。 ばっちり解決しました。 素晴らしいです。

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

その他の回答 (1)

noname#182251
noname#182251
回答No.2

同じ値が有って SELECT TOP 25 の結果が26以上になる場合はどのように処理する仕様なのでしょうか?

sinogoo
質問者

お礼

質問に不備があり、ご迷惑おかけします。 ([種別][日付])の組み合わせで、ユニークな為、26以上になることは無いと考えております。

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

関連するQ&A

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

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

  • グループ関数のエラーについて

    下記SQLを実行するとエラーが返ってきます。 構文は合っていると思うのですが何故でしょうか。 1 select nation 2 from nation 3 group by nation 4* having area > avg(area) SQL> / having area > avg(area) * 行4でエラーが発生しました。: ORA-00979: GROUP BYの式ではありません。 副問合せをするとうまくいきました。 1 select nation 2 from nation 3* where area >(select avg(area) from nation) どちらの方法も同じ考え方だと思うのですが、上のやり方でエラーが出る理由を教えてほしいです。 回答のほどよろしくお願い致します。 SQL> desc nation; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- CODE NOT NULL NUMBER(5) NATION NOT NULL VARCHAR2(28) CAPITAL VARCHAR2(20) AREA NUMBER(22) POPULATION NUMBER(22)

  • 相関サブクエリの中で、グループ化はできない?

    いつもお世話になっています。 オラクルではないのですが、SQLの質問が多く感じたため、質問させていただきました。 タイトルの通り、相関サブクエリはグループ化した状態で行えるのか教えていただきたいんです。 課題は、売上表(Sales)から、売上数量(Quantity)の平均の10倍よりも売上数量(Quantity)の最大の方が大きい商品IDを見つけ出す。というものです。 考えたSQLは SELECT __S1.ProductID FROM __Sales AS S1 GROUP BY __ProductID HAVING __AVG(Quantity) * 10 < (SELECT    __MAX(Quantity)    FROM    __Sales AS S2    GROUP BY    __ProductID    HAVING    __S1.ProductID = S2.ProductID) です。考え方として 相関サブクエリで、現在の商品ID(HAVING S1.ProductID = S2.ProductIDのところ)の商品数量の最大値を比較として返そうと思いましたが、どうもうまくいきません。 こういった相関サブクエリは作れないのでしょうか?

  • サブクエリーを使わずに二つのカラムをORDER BYし、さらに重複を除きたい

    以下のようなテーブルで、価格の高い順、重さの低い順、かつ種別の重複を除いた結果を求めたいと思っています。 (表はエディタ等にコピペしてご確認ください) ■商品テーブル 商品CD|種別CD| 価格 | 重さ ------+------+------+------ 1| 1| 150| 12 ------+------+------+------ 2| 1| 110| 8 ------+------+------+------ 3| 2| 120| 11 ------+------+------+------ 4| 2| 105| 15 ------+------+------+------ 5| 2| 112| 7 ------+------+------+------ 6| 3| 110| 13 ------+------+------+------ 7| 3| 130| 5 ------+------+------+------ 8| 3| 90| 3 ------+------+------+------ 9| 4| 120| 6 ------+------+------+------ 10| 4| 120| 3 ------+------+------+------ 11| 4| 110| 10 ------+------+------+------ ■欲しい結果 商品CD|種別CD| 価格 | 重さ ------+------+------+------ 1| 1| 150| 12 ------+------+------+------ 7| 3| 130| 5 ------+------+------+------ 10| 4| 120| 3 ------+------+------+------ 3| 2| 120| 11 ------+------+------+------ サブクエリーを使用する場合は以下のように書けばよいことが分かりました。 SELECT * FROM (SELECT * FROM shohin ORDER BY KAKAKU DESC,OMOSA ) temp GROUP BY SHUBETSUCD ORDER BY KAKAKU DESC,OMOSA しかし、今回使用しているMySQLのバージョンが古いため、サブクエリーが使えません。サブクエリーを使用せずに同様の結果を求める方法はございますでしょうか? ご存知の方がいらっしゃいましたら、ご教示いただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • UNION / UNION ALL 時のORDER BY について

    初めて質問させていただきます。 表A(以下,TBL_A) と 表B(以下,TBL_B)があり,表名が 異なるだけでカラムの項目数,データ型は一致していてそれぞれ [TBL_A] SELECT * FROM TBL_A ORDER BY 1, 2 [TBL_B] SELECT * FROM TBL_B ORDER BY 2, 1 を UNION / UNION ALL したいのですが,上記のように ORDER BY が異なっている場合にはどのようにすれば いいのでしょうか? 苦戦中の成果物としてはそれぞれに固有の区分カラムを設け, その区分で判断し DECODE で ORDER BY しようとしたのですが 「"右カッコがありません"」と出て行き詰っています。 SELECT 区分, ○○, □□ FROM TBL_A WHERE ○○ = ??? UNION ALL (SELECT 区分, ○○, □□ FROM TBL_B) ORDER BY 区分, DECODE(区分,A,(1,2),B,(2,1)) 宜しくお願いします。

  • group by句について

    すいません。教えてください。 emp表からJobのデータが何種類あるか出力したいとき、 ・ select count(distinct job) from emp; はいいのに、 ・ select count(job) from emp group by job; がエラーになる理由を知っている方、教えてください。

  • GROUP BY で列名は指定できないの?

    いつもお世話になっております。 SQLで GROUP BY を使うときに SELECT部分で指定した 列名を指定したいことがよくあると思います。 列名を指定する方法はないのでしょうか? 例) SELECT 項目A, CASE WHEN 項目B = 1 THEN '○' WHEN 項目B IN (2,3) THEN '×' END AS 丸バツ, SUM(数量) FROM TABLE GROUP BY 項目A, 丸バツ こんな風にGROUP BYで指定したいのですが・・・。

  • 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の仕様ですか!? どなたか教えてください!宜しくお願い致します。

  • SQL GROUP BY

    SQLについてお聞きしたいです。番号カラムの中で最大の数字をもつフィールドと 同じコードを持つデータを、表から全て取得したいと思っているのですが 書き出すとGROUP BYの式が間違っているというエラーが出てしまいます。 SELECT * FROM 表 GROUP BY コード HAVING MAX(番号) = コード どう調べればいいのか分からず四苦八苦しています。どこを直せばよいでしょうか?

  • SQL文のGROUPとORDERの順番

    こんににちは、 得点表(学生番号、科目コード、得点)があります。 得点表から各学生の合計得点を求めて降順に整列する場合の正解は、 SELECT 学生番号,SUM(得点) FROM 得点表 GROUP BY 学生番号 ORDER BY 2 DESC だったのですが、この2はSUM(得点)のことでしょうか? また、 SELECT 学生番号,SUM(得点) FROM 得点表 ORDER BY 2 DESC GROUP BY 学生番号 のようにGROUP と ORDER をひっくり返した場合、間違いになるのでしょうか? お分かりの方がいましたら教えてください。 よろしくお願いします。