SQLServerのSQL文です。
dbo_TblAには以下のようなデータが2行入っています。(重複している)
SYAINCD XXXXX
StartDT 2011/1/1
EndDT 2011/12/31
YuukouDT 2011/1/2
以下のSQL文を発行すると、1行だけの結果を返してくるのですが
理由が分かりません。
まったく見たことのないSQL文の書き方なのでどう解釈してよいか分からず
困っています。
解釈いただけると大変助かります。
SELECT H.DT_Date, H.DT_EndDate
FROM dbo_TblA AS H
WHERE (((H.SYAINCD)="XXXXX") AND ((H.StartDT)=(SELECT MAX( K.StartDT)
FROM dbo_TblA K, dbo_TblA L
WHERE K.SYAINCD = H.SYAINCD
AND L.SYAINCD = K.SYAINCD
AND L.StartDT = K.StartDT
AND L.YuukouDT = K.YuukouDT
AND L.StartDT <= #2011/04/20#)) AND ((H.YuukouDT)=(SELECT MAX(H_ED.YuukouDT) FROM dbo_TblA H_ED
WHERE H.SYAINCD = H_ED.SYAINCD
AND H.StartDT = H_ED.StartDT
AND H_ED.YuukouDT <= #2011/04/20#)));
No.1ベストアンサー
- 回答日時:
このSQLでは
>dbo_TblAには以下のようなデータが2行入っています。(重複している)
>SYAINCD XXXXX
>StartDT 2011/1/1
>EndDT 2011/12/31
>YuukouDT 2011/1/2
のデータが2レコードのみ存在する場合は2件のレコードが返されると思います。
dbo_TblAのStartDTに2011/1/2以降のデータまたはYuukouDTに2011/1/3以降のデータが
1レコードのみ存在した場合SQLの結果がはじめて1レコードになります。(もちろんSYAINCD='XXXXX')
条件文を
(H.StartDT)=(
SELECT MAX( K.StartDT)
FROM dbo_TblA K, dbo_TblA L
WHERE K.SYAINCD = H.SYAINCD
AND L.SYAINCD = K.SYAINCD
AND L.StartDT = K.StartDT
AND L.YuukouDT = K.YuukouDT
AND L.StartDT <= '2011/04/20')
と
(H.YuukouDT)=(
SELECT MAX(H_ED.YuukouDT) FROM dbo_TblA H_ED
WHERE H.SYAINCD = H_ED.SYAINCD
AND H.StartDT = H_ED.StartDT
AND H_ED.YuukouDT <= '2011/04/20')
にわけて考えればわかりやすいと思います。
何を抽出するSQLかわかりませんがこんな奇怪なSQLは書かないように努力しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- その他(プログラミング・Web制作) 物理の斜方投射のシミュレーションにおける位置や速度の単位について 4 2023/05/31 09:50
- PHP php エラー 2 2022/10/23 16:43
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- 工学 フィードバック制御の問題です。 1 2022/12/11 20:15
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORMについて
-
AccessのSQL文で1件のみヒット...
-
SELECT FOR UPDATE で該当レコ...
-
MERGE文について
-
オラクルのレコードカウントの制御
-
デフォルトでデータが表示され...
-
引数によってwhere句を切り替え...
-
SQLです教えてくださいお願いし...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
Excelの並び替え(文字数と画数...
-
ファイルの漢数字の順番につい...
-
SQLです。下記の問合せを行うク...
-
日付検索で0001-01-01 00:00:00...
-
DISTINCTROWについてです。
-
MySQLのdatetime型に0月0日を格納
-
SQLで曜日のソートを月火水木金...
-
NULLの挿入の仕方が…?
-
SQLです下記の問合せを行うクエ...
-
ORDER BY の項目を SELECT する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
AccessのSQL文で1件のみヒット...
-
where句中のtrim関数について
-
アクセスのレポートでレコード...
-
group byの並び順を変えるだけ...
-
引数によってwhere句を切り替え...
-
SQL*Loader Append
-
SQLで条件にヒットしたレコード...
-
updateで複数行更新したい
-
データ
-
トランザクションログを出力せ...
-
「数字で始まらない」ものを抽...
-
大量レコードをTRUNCATEせずに...
-
osqleditについて
-
BLOB型項目をSQLの検索条件に指...
-
これをSQL文で出来るでしょうか?
-
ACCESS レコードの並び順について
-
【SQL】違うフィールド同士の集...
おすすめ情報