• ベストアンサー

過去7日間の集計

お世話になります コロナ感染者数の地域(都道府県、保健所)の情報をAccessに入力してエクセルでグラフにしています 日々の過去7日間の集計をしたいです テーブルは以下の通りです ・M_保健所:保健所マスター  1.ID:主キー  2.保健所名:都道府県名または保健所名 ・T_感染履歴  1.ID  2.日付  :主キー  3.保健所ID:主キー M_保健所.IDにリレーション  4.新規感染者数  5.一万人当:単位当感染者数  6.週計:七日間の新規感染者数 --------------------------------------- 以上よろしくお願いいたします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.12

> 一万人当と新規感染者数の2つの7日間の集計をしたい そもそもこの部分が出来ていないのに追加まで考えるのは無理があると思います。 何を見てSQLを書いているのか分かりませんが、クエリを作って正常に動いたSQLを参考にした方がいいのではないですか。 あと、VBAではSQL文じゃないと駄目と思っているのでしょうか、クエリ自体をVBAで実行できますからそちらを選択したほうがいいと思います。

chayamati
質問者

お礼

ご提案色々ありがとうございます。 クエリは分かりやすいのですが、 クエリのSQLレビユーをアレンジして、docmd.runSQLに加工しています 使い捨てのクエリの数が増えたりして、 フォームのクエリビルダで作成しています 一つの処理で複数のクエリを順番を間違わずに起動しなければならない 等で、VBAは欠かせません 不都合を整理して、改めて質問しますので、その時はよろしくお願いいたします。

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

その他の回答 (11)

  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.11

ちなみに、集計した結果をテーブルに追加したいということであれば、集計クエリを基にした追加クエリを作成したらいいのではないでしょうか。

chayamati
質問者

お礼

ありがとうございます 一万人当と新規感染者数の2つの7日間の集計をしたいのですが、一万人当のみ出来ます

chayamati
質問者

補足

承知しました 色々ありがとうございました そろそろ閉めさせていただきます。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.10

> DSum ( expr , domain [, criteria] )関数は引数が判らず試せません 紹介したサイトの説明を見てわからないのでは申し訳ありませんがついていけません。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.9

No.8の訂正です。 よく見てなくて申し訳ありません。更新クエリでSumとか使えなかったと思います。 集計クエリでと回答させてもらってます。 集計を更新する場合は、以下のサイトを参考にしてみてください。 access 集計値更新 http://psp8155.blog13.fc2.com/blog-entry-253.html 更新クエリで定義域集計関数を使わずに集計する https://hatenachips.blog.fc2.com/blog-entry-350.html

chayamati
質問者

補足

色々お世話になっております。 DSum ( expr , domain [, criteria] )関数は引数が判らず試せません DoCmd.RunSQL ("delete from W_週感染率;")の後  DoCmd.RunSQL ("Insert Into W_週感染率(日付,保健所ID,感染率週)" _ & "Select 日付,保健所ID,sum(一万人当) From T_感染履歴 "_ & "where (日付 = forms!目次!週末) Group By 日付,保健所ID") はOKですが  DoCmd.RunSQL ("Insert Into W_週感染率(日付,保健所ID,新規感染者数,感染率週)" _ & "Select 日付,保健所ID,新規感染者数,sum(一万人当) From T_感染履歴 " _   & "where (日付 = forms!目次!週末) Group By 日付,保健所ID") と新規感染者数を加えると  実行時エラー3122   クエリに、集計関数の一部として指定された式’新規感染者数が含まれていません

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.8

No.7の訂正です。 > 前の回答にも書きましたがクエリで更新クエリ作ってSQL取り出してください。 更新クエリでできたSQLというのを見逃してました。 どれかをグループ化しなければいけないのではないですか。

chayamati
質問者

お礼

色々お世話になっております。 DSum ( expr , domain [, criteria] )関数は引数が判らず試せません

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.7

「クエリに集計関数の一部として指定された式'週計」が含まれていません' をそのまま考えたらいいのではないですか。 [W_感染履歴].週計 とかで駄目ですか。 前の回答にも書きましたがクエリで更新クエリ作ってSQL取り出してください。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.6

> UODATEステートメントの構文エラーです。 「wher 」が違うのではないでしょうか。 クエリを作成してそのSQL文をコピペしたら間違わないと思います。

chayamati
質問者

補足

有難うございます。 おっしゃる通り,whereですね、 1.訂正後実行しましたが、前回と同じエラーコードです 2.更新クエリのSQLは  次の通りです --------------------------------------------------------------- UPDATE W_感染履歴 SET W_感染履歴.週計 = Sum([W_感染履歴]![感染率]) WHERE ((([W_感染履歴]![初日])<=[W_感染履歴]![日付]) AND (([W_感染履歴]![終日])>=[W_感染履歴]![日付])); ---------------------------------------------------------------------------- クエリを実行すると(開く)エラーコードなしで「クエリに集計関数の一部として指定された式'週計」が含まれていません'

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.5

No.4の追加です。 各保健所の個々の集計は別々ではなくて普通の集計クエリで作成して テキストボックスのソースに =DLookUp("集計したフィールド","集計クエリ","保健所のフィールド名='保健所A'") でしょうか。

chayamati
質問者

お礼

ありがとうございます。 補足しますので、よろしければご回答を

chayamati
質問者

補足

お世話様です 実行時エラー'3144' UODATEステートメントの構文エラーです。 T_感染履歴をW_感染履歴にコピーして試しています コードは以下の通りです --------------------------------- Private Sub グラフ作成_Click() DoCmd.SetWarnings False 週計ビルドRTN DoCmd.RunSQL (" delete from TMP_比較 :") 感染履歴_比較INS_RTN 感染履歴_比較UPD_RTN End Sub Private Sub 週計ビルドRTN() DoCmd.RunSQL ("UPDATE W_感染履歴 感染率週=sum(一万人当) wher 日付>=初日 and 日付<=終日 ;") End Sub --------------------------------------------------------------- DLookUp("集計したフィールド","集計クエリ","保健所のフィールド名='保健所A'") 保健所は全国、都道府県、わが県の保健所で五〇数件が対象で保健所A~保健所で、次のグラフを作成しています 保健所A:感染者の推移 保健所A都B:2保健所の感染率対比 任意の5保健所の感染率

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.4

No.3の追加です。 もしくは、フォームのレコードソース無しで、それぞれのテキストボックスのソースに =DLookUp("集計値","個々の保健所の集計クエリ") でもいいと思います。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.3

申し訳ありませんが、よく分からないままのでの回答になります。 Between 〈開始日〉 And 〈終了日〉 でその日付間の各保健所の個々の集計を集計クエリで出して、そのクエリが合体したものをフォームのレコードソースにして、個々の保健所のそれぞれの結果をテキストボックスのソースにすればいかがですか。

すると、全ての回答が全文表示されます。
  • pkweb
  • ベストアンサー率46% (212/460)
回答No.2

SELECT T_感染履歴.日付, M_保健所.保健所名, Sum(T_感染履歴.新規感染者数) AS 直近7日間の新規感染者数 FROM M_保健所 INNER JOIN T_感染履歴 ON M_保健所.ID = T_感染履歴.保健所ID WHERE (((T_感染履歴.日付)>=Date()-7)) GROUP BY T_感染履歴.日付, M_保健所.保健所名; このクエリでは、T_感染履歴テーブルとM_保健所テーブルを結合しています。WHERE句で日付がダウンロード7日間のデータを抽出し、GROUP BY句で日付と保健所名でグループ化しています。を使用して、7日間の新規感染者数を合計しています。 このクエリの結果をエクセルに貼り付け、グラフ化することで、日付ごとに都道府県ごとの新規感染者数のトレンドを把握することができます。

chayamati
質問者

お礼

ご回答ありがとうございます。 質問が曖昧で申し訳ありません https://www3.nhk.or.jp/news/special/coronavirus/data/ の直近1週間の人口10万人あたりの感染者数 我が県の保健所も含めるため1万人当りとしています 開始日~終了日迄の7週分(35日間)の日々の直近1週間分の計です。 フォーム上には〈開始日〉〈終了日〉〈保健所A〉〈保健所B〉〈保健所C〉〈保健所D〉〈保健所E〉 の非連結のテキストボックスを配置しています

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

関連するQ&A