• 締切済み

テーブルの統合・日付別集計

Accessを使ってあるデータの送信履歴を記録しており 日付別の統計を取りたいと考えています。 AテーブルとBテーブルは以下のような構造をしています。  [id]項目ID(数値型)  [senddate]日付を表すフィールド(日付/時刻型)  [endflg]終了フラグ(数値型) endflg=1を条件にして Aテーブル・Bテーブルを統合した日付別統計をとるには どのようなSQL文を書けばよいのでしょうか?

みんなの回答

回答No.3

SELECT DateValue([senddate]) AS 日付,COUNT(*) AS カウント FROM (SELECT * FROM Aテーブル where endflg = 1 UNION ALL SELECT * FROM Bテーブル where endflg = 1 ) GROUP BY DateValue([senddate]) でどうでしょう? また、ある特定の日を抽出したければ、 SELECT DateValue([senddate]) AS 日付,COUNT(*) AS カウント FROM (SELECT * FROM Aテーブル where endflg = 1 UNION ALL SELECT * FROM Bテーブル where endflg = 1 ) GROUP BY DateValue([senddate]) HAVING DateValue([senddate]) = #2003/10/10# でどうでしょうか?

  • junijuni
  • ベストアンサー率25% (12/48)
回答No.2

SELECT COUNT(*) FROM (SELECT * FROM Aテーブル where endflg = 1 UNION ALL SELECT * FROM Bテーブル where endflg = 1 ) WHERE senddate between '2003/10/10' AND '2003/10/11' などとすれば2003年10月10日分のカウントでませんか? between '2003/10/01' AND '2003/10/31' とすれば2003年10月分のカウント 0時0分0秒の扱いが…ちょっと問題あり 厳密にということであれば GROUP BY YEAR(senddate),MONTH(senddate),DAY(senddate) で日ごとのカウントがとれるでしょー

回答No.1

SELECT senddate,COUNT(*) FROM (SELECT * FROM Aテーブル where endflg = 1 UNION ALL SELECT * FROM Bテーブル where endflg = 1 ) GROUP BY senddate でどうでしょうか?

coffee_cafe
質問者

お礼

ありがとうございます。 UNION ALLで繋げることができるのですね。 ちなみにsenddateが日付/時刻型なので これだと日付別の統計でなく時刻まで含んだグルーピングになってしまうのですが 日付に直すには、また○月分というように月を条件に日付別集計にするには どうしたら良いのでしょうか?

関連するQ&A