質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

2024閲覧

【SQL】Accessを使って日付をまたぐ場合にレコードを分割したいです。

player31

総合スコア21

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/11/18 14:49

Access_SQLを使って特定のレコードの中で、日付をまたぐ場合にレコードを分割したいです。
下記のテーブルの中で 'start' → 'finish'が日付をまたぐ場合に、その日の23:59までと次の日の00:00からの2つのレコードに分割したいと思っています。

具体的には、 'start' → 'finish'が '2010/5/10 18:00' → '2010/5/11 7:00'の場合
'2010/5/10 18:00' → '2010/5/10 23:59'と '2010/5/11 00:00' → '2010/5/11 7:00'の2つに分割したいです。

Table
id|Start|finish|Score
|:--|:--:|--:|
A|2010/5/10 18:00|2010/5/11 7:00|2
B|2011/6/10 13:00|2011/6/10 18:00|3
B|2011/6/10 21:00|2011/6/11 5:00|4

出力したい結果
id|Start|finish|Score
|:--|:--:|--:|
A|2010/5/10 18:00|2010/5/10 23:59|2
A|2010/5/11 0:00|2010/5/11 7:00|2
B|2011/6/10 13:00|2011/6/10 18:00|3
B|2011/6/10 21:00|2011/6/10 23:59|4
B|2011/6/11 0:00|2011/6/11 5:00|4

方法がわかる方がいらっしゃいましたら、ぜひ教えていただけたら幸いです。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2020/11/18 23:01

分割してそのさきに何がしたいのかを記載した方がいいのではないでしょうか
player31

2020/11/18 23:08

ご指摘ありがとうございます。 追記して、改めてご質問されていただきます。 >>分割した後何がしたいのか →分割したあと、その日ごとのScoreの合計を出したいと思っています。
sousuke

2020/11/19 00:26

→分割したあと、その日ごとのScoreの合計を出したいと思っています。 一応確認ですけどこれだと日をまたいだスコアが倍に増えますがそれでいいんですか?
guest

回答1

0

ベストアンサー

行を増やす必要があるので、unionを使用して分割します。

SQL

1 select id, start 2 , IIf( 3 Format(start, "yyyy/mm/dd") <> Format(t1.finish, "yyyy/mm/dd") 4 , CDate(Format(start, "yyyy/mm/dd 23:59:59")) 5 , t1.finish 6 ) as finish 7 , Score 8 , datediff("n", start, t1.finish) as OrigialDiff 9 from テーブル1 t1 10union all 11 select id 12 , CDate(format(finish, "yyyy/mm/dd 00:00:00")) 13 , finish 14 , Score 15 , datediff("n", start, finish) as OrigialDiff 16 from テーブル1 17 where Format(start, "yyyy/mm/dd") <> Format(finish, "yyyy/mm/dd") 18order by start

・解説
**最初のSelect:**元のデータと同じ件数で、日付を跨っている場合のFinishをstartの日付の終わりの時刻に編集します。
**次のselect:**日付が跨っているものだけの件数で、Startをfinishの日付の始まりの時刻に編集します。
**OrigialDiff:**元々のstart-finish間の時間差(分)。Scoreを案分する場合に使用。

投稿2020/11/19 00:45

編集2020/11/19 04:29
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

player31

2020/11/19 04:19

ありがとうございます。お陰様でやりたいことができました。 解説もとてもわかりやすく、勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問