アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前別サイトで質問をさせていただきましたが
解決が出来なかったため、質問させていただきます。

ACCESSでのデータ抽出の質問です。

下記のような構造のテーブルがあり、そこから日付別の時間帯毎の個数を集計したいと考えています。
ここで日を跨ぐ場合の集計方法が分からずに困っています。
考え方をしては「9:00~翌3:00」を1日として「0:00~3:00」の時間帯のデータ数は
前日の日付の欄に表示させたいです。

■履歴テーブル
・日付(日付/時刻型)
・項目(短いテキスト)

■時間帯
・時間帯_1…9:00~12:00
・時間帯_2…12:00~17:00
・時間帯_3…17:00~22:00
・時間帯_4…22:00~3:00

■取得したい結果
日付 | 項目 |時間帯_1|時間帯_2|時間帯_3|時間帯_4|
----------------------------
2020/01/01|販売| 30 | 20 | 10 | 10 |
2020/01/02|販売| 10 | 10 | 10 | 10 |
2020/01/02|買取| 10 | 10 | 10 | 10 |
2020/01/03|販売| 20 | 30 | 40 | 50 |
2020/01/03|買取| 10 | 10 | 10 | 10 |



別サイトで教えていただいたヒントを参考に
select 日付, 項目,
sum( iif(TIMEVALUE([日付])>=#09:00:00# and TIMEVALUE([日付])<=#12:00:00#, 1, 0) ) as [時間帯_1],

sum( iif(TIMEVALUE([日付])>=#12:00:00# and TIMEVALUE([日付])<=#17:00:00#, 1, 0) ) as [時間帯_2],

sum( iif(TIMEVALUE([日付])>=#17:00:00# and TIMEVALUE([日付])<=#22:00:00#, 1, 0) ) as [時間帯_3],

sum( iif(TIMEVALUE([日付])>=#22:00:00# or TIMEVALUE([日付])<=#03:00:00#, 1, 0) ) as [時間帯_4]

where [日付] between #2020/01/01# and #2020/01/31#
group by format([日付],"yyyy/mm/dd"), 項目

上記のように作成をしました。

ここから「0:00~3:00」の時間帯のデータ数は前日の日付の欄に表示させるため

group by の部分を
group by format(iif(TIMEVALUE([日付])<=#5:00:00#,dateadd("d",-1.[日付]),[日付]),''yyyy/mm/dd)

という風に変更しましたが、構文エラーとなります。

どのようにSQLを書けば、思っているようなデータを作ることが出来るでしょうか。

ご教授よろしくお願い致します。

A 回答 (1件)

>group by format(iif(TIMEVALUE([日付])<=#5:00:00#,dateadd("d",-1.[日付]),[日付]),''yyyy/mm/dd)



group by format(iif(TIMEVALUE([日付])<=#5:00:00#,dateadd("d",-1,[日付]),[日付]),''yyyy/mm/dd)

DateAddでの引数の区切りがカンマではなくピリオドになってたから?(未検証)
でも『5時以下』ってどう言う事なのかちょっと疑問。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

かなり初歩的なミスで申し訳ありませんでした。
カンマとピリオド。
時間の打ち間違い…
次からは自分で気付けるようにします。

お礼日時:2020/03/03 06:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています