Page 208 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼日付を使った条件について ひえええ 03/2/20(木) 1:03 ┗Re:日付を使った条件について こうちゃん 03/2/21(金) 12:25 ┗Re:日付を使った条件について ひえええ 03/2/23(日) 15:13 ┗Re:日付を使った条件について よろずや 03/2/23(日) 20:50 ┗そうですよね、SQL一発! こうちゃん 03/2/24(月) 9:00 ┗Re:そうですよね、SQL一発! ひえええ 03/2/24(月) 10:59 ┗Re:そうですよね、SQL一発! こうちゃん 03/2/24(月) 13:54 ┗Re:そうですよね、SQL一発! ひえええ 03/2/24(月) 19:54 ─────────────────────────────────────── ■題名 : 日付を使った条件について ■名前 : ひえええ ■日付 : 03/2/20(木) 1:03 -------------------------------------------------------------------------
こんにちは。 テーブルの中にある日付(開始日、終了日)を比較して3か月前になったものを 全権間作して件数だけ抽出したいと思っています。 現在の状況は、 件数がでるが、その条件のところをとおっていない ループも全件まわっている 開始日、終了日をDateDiff関数で年を月に換算している 終了日が3以下になったら件数という変数に1を追加 というつもりのロジックを書いてます。 日付の型がきっとおかしいと考えられるので教えて下さい。 よろしくおねがいします |
ひえええさん、こんにちは 質問の意味がよくわかりませんので、少し教えてください。 >テーブルの中にある日付(開始日、終了日)を比較して3か月前になったものを なんと何を比較して「3か月前」と判断するのでしょう? 現在から開始日?現在から終了日?開始日から終了日? >全権間作して件数だけ抽出したいと思っています。 >現在の状況は、 >件数がでるが、その条件のところをとおっていない >ループも全件まわっている >開始日、終了日をDateDiff関数で年を月に換算している >終了日が3以下になったら件数という変数に1を追加 >というつもりのロジックを書いてます。 そのロジックをアップできませんか?そのほうが回答しやすいと思います。 >日付の型がきっとおかしいと考えられるので教えて下さい。 >よろしくおねがいします 回答でなくてごめんなさいね。 |
こうちゃん さんありがとうございます かんたんなロジックをいれておきました。 ちなみに、日付け形式(Date)を数字に変換すると 新しい日付けの方が数値が大きくなるのでしょうか? 初心者なのにいきなりこんな難しいものにぶつかってます。くすん こちらも御存じであれば教えて下さい。 >質問の意味がよくわかりませんので、少し教えてください。 >>テーブルの中にある日付(開始日、終了日)を比較して3か月前になったものを >なんと何を比較して「3か月前」と判断するのでしょう? 終了日からです kaisi = ds!開始日 owai = ds!終了日 ’テーブルの内容をそれぞれ代入 syuryobi = DateAdd("m".-3,owari) syuryo - DateDiff("m",syuryo,date) ここで、「kaisi」と「syuryo」はDate宣言ですが いいのでしょうか?おそらくはじめDateで宣言して 数字に代入するところがおかしいとおもいます。 「syuryobi」と「syuryo」はIntegerです。 済みませんが、返答おまちしてます > >>全権間作して件数だけ抽出したいと思っています。 >>現在の状況は、 >>件数がでるが、その条件のところをとおっていない >>ループも全件まわっている >>開始日、終了日をDateDiff関数で年を月に換算している >>終了日が3以下になったら件数という変数に1を追加 >>というつもりのロジックを書いてます。 >そのロジックをアップできませんか?そのほうが回答しやすいと思います。 >>日付の型がきっとおかしいと考えられるので教えて下さい。 >>よろしくおねがいします > >回答でなくてごめんなさいね。 |
>>>テーブルの中にある日付(開始日、終了日)を比較して3か月前になったものを >>なんと何を比較して「3か月前」と判断するのでしょう? >終了日からです 普通こういうのは、いちいち数えたりはしません。 今日から3ヶ月後の日付と終了日を比較してカウントするSQL文を書けば 一発で答が得られます。 SELECT COUNT(*) FROM テーブル名 WHERE 終了日 <= 今日から3ヶ月後の日付 ってな感じです。 あれっ、開始日はどうするんだろう? 問題を小出しにすると、解決までに時間がかかることになりますよ。 |
よろずやさん、こんにちは >普通こういうのは、いちいち数えたりはしません。 >今日から3ヶ月後の日付と終了日を比較してカウントするSQL文を書けば >一発で答が得られます。 >SELECT COUNT(*) FROM テーブル名 WHERE 終了日 <= 今日から3ヶ月後の日付 >ってな感じです。 >あれっ、開始日はどうするんだろう? SQLを紹介したかったんですが、どこ基準かわからなくて書きようがなかったんです。 >問題を小出しにすると、解決までに時間がかかることになりますよ。 ということで、ひええええさん、もう少し全体がみえるようにしていただけますか? |
よろずやさん、こうちゃんさん ありがとうございます。SQLでいいんですね。 いままでVBにこだわっていたせいでよけいわからなくなっていました。 詳細を説明します 開始日と終了日があり、終了日3ヶ月前に近付いたらアナウンスをするので 該当するものの件数とクエリを出したいのです。 フォームのボタンそれぞれをクリックすると件数がメッセージボックスで表示され、 クエリが開くようにしたいのです。 先ほどのよろずやさんの解答により大分わかってきたのですが、SQLでは 終了日から3ヶ月前と入れ込むのが難しいのではないでしょうか? よろしくお願いいたします。 |
ひえええさん、こんにちは >開始日と終了日があり、終了日3ヶ月前に近付いたらアナウンスをするので >該当するものの件数とクエリを出したいのです。 >フォームのボタンそれぞれをクリックすると件数がメッセージボックスで表示され、 >クエリが開くようにしたいのです。 >先ほどのよろずやさんの解答により大分わかってきたのですが、SQLでは >終了日から3ヶ月前と入れ込むのが難しいのではないでしょうか? チェックした日(今日)が終了日の3ヶ月以内と考えたほうがわかりやすいのでは? こんな感じでいかがでしょ? 以下のモジュールでは終了日が今日以降で、3ヶ月以内のレコード件数をカウントします。 ADOつかってますので、参照設定おわすれなく^^ Sub test11() Dim CheckPoint As Date Dim strSQL As String Dim DataConn As ADODB.Connection Dim Rs As ADODB.Recordset CheckPoint = DateAdd("m", 3, Date) strSQL = "SELECT Count(*) AS 件数 FROM テーブル3 " strSQL = strSQL & "WHERE 終了日 > #" & Date & "# " strSQL = strSQL & "AND 終了日 <= #" & CheckPoint & "# " Set DataConn = CurrentProject.Connection Set Rs = New ADODB.Recordset Rs.Open strSQL, DataConn, adOpenStatic If Not Rs.EOF Then MsgBox Rs("件数") End If Rs.Close Set Rs = Nothing Set DataConn = Nothing End Sub |
こうちゃんさん、よろずやさん ありがとうございます!!一発でできました。 SQLをもっと勉強しなければ。 SQLですごく役に立つおすすめ本はないでしょうか? よかったら教えてください。 |