みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL文でデータを抽出できない。

現行のSQL文でACCESSからデータを抽出してきていたのですが、それでは問題が起きてしまったので、以下の内容にSQLを変更したいのですが、思うようにできません。
詳しい方がいましたらご教授願います。
お手数ですが、困っているのでよろしくお願いいたします。

*現行のSQL*
日付が最も若いものでかつ、IDとSUBJECTに重複のない
データを抽出する。

"SELECT .sID,B.subject,B.D_time
FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data GROUP BY sID,subject) A
INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;"

*変更したいSQL*
ある範囲の日付の中で(日付は、入力画面から抽出)日付が最も若いものでかつ、IDとSUBJECTに重複のないデータを抽出する。

"SELECT .sID,B.subject,B.D_time
FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data WHERE D_time <= & w_jyukobistart GROUP BY sID,subject) A
INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;"

以上を実行すると、
[Microsoft][ODBC Microsoft Access Driver] クエリ式 'D_time <= & w_jyukobistart' の 構文エラー : 演算子がありません。
というエラーが出ます。
ちなみにw_jyukobistart はWEBの画面上に入力された抽出したいデータ範囲(from)です。
この変数の使い方に問題があるのか、それともSQL文自体に無理があるのか、最も良い方法をお尻の技術者の方、お答えいただけるとうれしいです。

投稿日時 - 2009-06-04 18:36:31

QNo.5016755

困ってます

質問者が選んだベストアンサー

>ただ、コンパイルは通ったのですが、データ自体が正しく取得することができません。
"SELECT .sID,B.subject,B.D_time FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data WHERE D_time <= & w_jyukobistart GROUP BY sID,subject) A INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;"

だとすべて文字列として扱われるのでコンパイルは正常に終了します。
ただw_jyukobistartは変数であり変数名で検索を行うわけではありません。

Dim str As String
str = "10"
"A <= " & str
は「A <= 10」という文字列
"A <= & str"は
「A <= & str」という文字列になります。

つまり上のSQLだと変数の値を表示していません。

"SELECT .sID,B.subject,B.D_time FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data WHERE D_time <= " & w_jyukobistart & " GROUP BY sID,subject) A INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;"

SQLの文字列を
Debug.PrintやMsgBoxで表示してみるとわかりやすいです。


>日付の最小値を取得することに加え、日付の範囲を指定することに無理があるのでしょうか?
それなりによく行います。

投稿日時 - 2009-06-08 21:24:33

お礼

変数の取り扱い方に問題がやはりあったようです。
問題は解決いたしました。
丁寧な説明ありがとうございました。

投稿日時 - 2009-06-19 16:06:06

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

D_time <= & w_jyukobistart
ではなく
D_time <= " & w_jyukobistart & "

では?

投稿日時 - 2009-06-08 12:32:29

補足

ご回答ありがとうございます。
この程度の質問であり申し訳ございませんでした。
ただ、コンパイルは通ったのですが、データ自体が正しく取得することができません。

日付の最小値を取得することに加え、日付の範囲を指定することに無理があるのでしょうか?データの取得を考えた場合、他のSQL文で抽出する方法があるのでしょうか?もし詳しくおしりでしたら教えて下さい。よろしくお願いいたします。

投稿日時 - 2009-06-08 17:15:14

あなたにオススメの質問