- 締切済み
テーブルの統合・日付別集計
Accessを使ってあるデータの送信履歴を記録しており 日付別の統計を取りたいと考えています。 AテーブルとBテーブルは以下のような構造をしています。 [id]項目ID(数値型) [senddate]日付を表すフィールド(日付/時刻型) [endflg]終了フラグ(数値型) endflg=1を条件にして Aテーブル・Bテーブルを統合した日付別統計をとるには どのようなSQL文を書けばよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- akikan0125
- ベストアンサー率33% (3/9)
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)
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) で日ごとのカウントがとれるでしょー
- akikan0125
- ベストアンサー率33% (3/9)
SELECT senddate,COUNT(*) FROM (SELECT * FROM Aテーブル where endflg = 1 UNION ALL SELECT * FROM Bテーブル where endflg = 1 ) GROUP BY senddate でどうでしょうか?
お礼
ありがとうございます。 UNION ALLで繋げることができるのですね。 ちなみにsenddateが日付/時刻型なので これだと日付別の統計でなく時刻まで含んだグルーピングになってしまうのですが 日付に直すには、また○月分というように月を条件に日付別集計にするには どうしたら良いのでしょうか?