下記のようなテーブルがあって、時間帯がかぶっているレコードを
クエリで抽出したいと考えております。
≪tbl_配置一覧≫
ID 日付 勤務地 開始時間 終了時間 担当者
1 2009/9/2 東京 10:00 12:00 Aさん
2 2009/9/2 東京 13:00 14:00 Aさん
3 2009/9/2 神田 12:30 14:00 Bさん
4 2009/9/2 神田 09:00 11:00 Aさん
ID1と4のように同じ担当者が時間帯がかぶる形で勤務予定となっている場合、このレコード二つをクエリで抽出したいと考えております。
いろいろ探して下記のようなSQL文を書いてみたのですが、どうもうまくいきません。
SELECT tbl_配置一覧.ID, tbl_配置一覧.日付, tbl_配置一覧.勤務地, tbl_配置一覧.開始時間, tbl_配置一覧.終了時間, tbl_配置一覧.担当者
FROM tbl_配置一覧, tbl_配置一覧 AS tbl_配置一覧_1
WHERE (((tbl_配置一覧.ID)<>[tbl_配置一覧_1].[id]) AND ((tbl_配置一覧.日付)=[tbl_配置一覧_1].[日付]) AND ((tbl_配置一覧.勤務地)=[tbl_配置一覧_1].[勤務地]) AND ((tbl_配置一覧.開始時間)<[tbl_配置一覧_1].[終了時間]) AND ((tbl_配置一覧.終了時間)>[tbl_配置一覧_1].[開始時間]))
ORDER BY tbl_配置一覧.ID;
大変申し訳ないですが、ご教授よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
#1の方の回答にあるように、勤務地を担当者に変更することでサンプル上は動くと思います。
(以下は書き方を変更しただけなので同じものになります)
SELECT Q1.* FROM tbl_配置一覧 AS Q1, tbl_配置一覧 AS Q2
WHERE
Q1.ID <> Q2.ID
AND Q1.日付 = Q2.日付
AND Q1.担当者 = Q2.担当者
AND Q2.開始時間 < Q1.終了時間
AND Q2.終了時間 > Q1.開始時間
ORDER BY Q1.ID;
これは直積を使ったやり方です。(直積については以下参照)
http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82% …
ここでサンプルにデータ(ID=5)を1つ追加してみます。
ID 日付 勤務地 開始時間 終了時間 担当者
1 2009/9/2 東京 10:00 12:00 Aさん
2 2009/9/2 東京 13:00 14:00 Aさん
3 2009/9/2 神田 12:30 14:00 Bさん
4 2009/9/2 神田 09:00 11:00 Aさん
5 2009/9/2 秋葉原 10:30 11:30 Aさん
ここでは、1,4,5 を抽出する必要があります。
上記SQLを実行すると
ID 日付 勤務地 開始時間 終了時間 担当者
1 2009/9/2 東京 10:00 12:00 Aさん
1 2009/9/2 東京 10:00 12:00 Aさん
4 2009/9/2 神田 09:00 11:00 Aさん
4 2009/9/2 神田 09:00 11:00 Aさん
5 2009/9/2 秋葉原 10:30 11:30 Aさん
5 2009/9/2 秋葉原 10:30 11:30 Aさん
となります。
なぜかは、SELECT Q1.* FROM・・・ を SELECT * FROM・・・ に変更して他のフィールドを実際にみてください。
ここで 1,4,5 を抽出する一例は以下。
SELECT * FROM tbl_配置一覧 AS Q1
WHERE
EXISTS (
SELECT 1 FROM tbl_配置一覧 AS Q2
WHERE
Q1.ID <> Q2.ID
AND Q1.日付 = Q2.日付
AND Q1.担当者 = Q2.担当者
AND Q2.開始時間 < Q1.終了時間
AND Q2.終了時間 > Q1.開始時間
)
ORDER BY Q1.ID;
※なお、このクエリは編集できます。
※時間帯がかぶるのは、あっても2つまでであれば、そのままでもよいと思います。
参考URL:http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82% …
ご回答ありがとうございました。
めちゃくちゃわかりやすい回答で、問題が解決したばかりではなく、次につながるような知見も得る事が出来ました。
心より感謝しております。
私も似たような立場があれば、見習わなければと思いました。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- PHP PHPSpreadsheetを使って関数を繰り返し埋め込みたい 1 2023/05/24 11:33
- 労働相談 過去に双極性障害で一年間休職を経て復職して2年が経過します。会社はそれとなく退職をさせたいのか評価を 1 2023/04/09 14:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECTで1件のみ取得するには?
-
SQL>UPDATEと同時にその件数を...
-
☆☆☆☆SQL Olacle 3つ以上の文字...
-
取得するデータの件数指定、MyS...
-
oracleのinsert select性能
-
ORDER BY 半角カナ
-
sqlplusの処理が途中でとまる
-
Date型にNULLをセットしたい V...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
JSPのNULLレコード表示について...
-
select insertで複数テーブルか...
-
レコードが存在しなかった場合
-
ファイル書込みで一行もしくは...
-
Access を×ボタンで閉じ...
-
他のテーブルを参照した値はupd...
-
select句副問い合わせ 値の個...
-
ADO VBA 実行時エラー3021
-
"カレントレコードがありません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECTで1件のみ取得するには?
-
Date型にNULLをセットしたい V...
-
SQL>UPDATEと同時にその件数を...
-
sqlplusの処理が途中でとまる
-
oracleのinsert select性能
-
異なるDB間でのJOINやVIEWについて
-
連番のつけ方
-
ACCESSのSQLの書き方
-
☆☆☆☆SQL Olacle 3つ以上の文字...
-
プロシージャで変数をテーブル...
-
SELECTでの指定行からの指定行...
-
PostgreSQLで小数点以下を処理...
-
[Access]時間帯の重複チェック
-
AccessVBAでリンクテーブルの参...
-
マクロの編集方法を教えて下さい。
-
オラクル オブジェクトのデー...
-
SQL-文字列操作について
-
ORDER BY 半角カナ
-
SQLでのレコード抽出について、...
-
エクセルVBAのオートフィル...
おすすめ情報