DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベースからのデータ取得

環境/言語:[VB.Ne]
分類:[その他]

データベースからのデータの取得で悩んでいます。
1秒おきに作成されたデータベースからデータを取得しているのですが条件に
よって5秒ごととか10秒ごとのデータの取得をしないといけなくなりました。
データ数があまりにも多く(600件以上)1回1回For分で5秒ごとのデータを
取得していたら時間がかかってしまいます。簡単にSQLを発行して取得する方法は
ありませんか?

Dim datDate as DateTime = System.DateTime.Now

For ii as Integer = 1 To 600
    Dim strSQL as String = "SELECT * FROM Data" & _
                   " WHERE LogDate >= #"& dateDate.AddMinutes(ii) &" #"
   
   (結果抽出)
Next ii
■No12555に返信(PPさんの記事)
> データベースからのデータの取得で悩んでいます。
> 1秒おきに作成されたデータベースからデータを取得しているのですが条件に
> よって5秒ごととか10秒ごとのデータの取得をしないといけなくなりました。
> データ数があまりにも多く(600件以上)1回1回For分で5秒ごとのデータを
> 取得していたら時間がかかってしまいます。簡単にSQLを発行して取得する方法は
> ありませんか?
>
> Dim datDate as DateTime = System.DateTime.Now
>
> For ii as Integer = 1 To 600
> Dim strSQL as String = "SELECT * FROM Data" & _
> " WHERE LogDate >= #"& dateDate.AddMinutes(ii) &" #"
>
> (結果抽出)
> Next ii
>
>

データベースはAccess2003です
>Dim datDate as DateTime = System.DateTime.Now
>
>For ii as Integer = 1 To 600
> Dim strSQL as String = "SELECT * FROM Data" & _
> " WHERE LogDate >= #"& dateDate.AddMinutes(ii) &" #"
>
> (結果抽出)
>Next ii

今一歩、このSQL文の意味がわからないのですが・・・。今から10時間分未来のログを取ろうとしているように見えるのですが、未来のログって取れないですよね?
まず、ここで引っかかってしまいました。(^^;
>> Dim strSQL as String = "SELECT * FROM Data" & _
>> " WHERE LogDate >= #"& dateDate.AddMinutes(ii) &" #"
>>
> 今一歩、このSQL文の意味がわからないのですが・・・。今から10時間分未来のログを取ろうとしているように見えるのですが、未来のログって取れないですよね?
> まず、ここで引っかかってしまいました。(^^;

>> Dim strSQL as String = "SELECT * FROM Data" & _
>> " WHERE LogDate >= #"& dateDate.AddMinutes(ii) &" #"

すいません
dateDate は、取得したい開始時刻です。また、AddMinutesではなくAddSecondsでした。ようは、何回もSQLを発行して取得するのではなく、一度のSQLの発行で一定間隔
のログのデータを取得したいのです。
■No12566に返信(PPさんの記事)
> >> Dim strSQL as String = "SELECT * FROM Data" & _
> >> " WHERE LogDate >= #"& dateDate.AddMinutes(ii) &" #"
>
> すいません
> dateDate は、取得したい開始時刻です。また、AddMinutesではなくAddSecondsでした。ようは、何回もSQLを発行して取得するのではなく、一度のSQLの発行で一定間隔
> のログのデータを取得したいのです。

WHERE句の条件は「>=」ではなく「=」では駄目なのでしょうか?
dateDate.AddSeconds(ii * 5)みたいにして。
(基準日付より5秒間隔のデータを取得していく)
> ようは、何回もSQLを発行して取得するのではなく、一度のSQLの発行で一定間隔
> のログのデータを取得したいのです。

残念ながらこのままでは無理です。以下、思いつきですが・・・。

1.ログデータにもう一列追加して、5秒毎であれば、必ず5秒刻みになるように時刻を修正して保存します。あとはこの列でグループ化して抽出すれば、一度のSQLの発行で一定間隔のログが得られます。

2.正攻法でいくならば、ログを全てデータテーブルに取得しておき、そのデータテーブルを1件づつ読みながら別のデータテーブルに一定間隔毎のログを保存していき、最終的にこのデータテーブルをデータソースにすれば良いでしょう。

DOBON.NET | プログラミング道 | プログラミング掲示板