85791


現在、1秒間隔でcsvファイルにデータを記録しています。  
このデータから1分間隔のデータを抽出したいと考えています。

BETWEENを使って一定期間のデータを抜き出すことには成功しましたが、それは1秒間隔のデータなのでそこから更に1分間隔のデータに変更するのに少し時間を要しています。

開発環境はVBAです。

そもそも、BETWEENでそういったことが出来るか分かっていませんのでご教授をお願いします。

補足:  
コードはこちらになります。  
これで期間1から期間2の間のデータを抜き出しています。

[code]

    SELECT dt,ch1 FROM [data.csv] WHERE dt BETWEEN {日時1} AND {日時2}
    
[/code]

これですと期間内のデータが1秒間隔で抽出されます。

[code]

    2021/12/27 10:00:00,25.0
    2021/12/27 10:00:01,25.3
    2021/12/27 10:00:02,25.7
    2021/12/27 10:00:03,26.1
    ･･･
    2021/12/27 10:01:00,31.2
    2021/12/27 10:01:01,31.4
    
[/code]

いまはこのデータを更にループ文などで処理して下記1分間隔のデータを抽出しています。

[code]

    2021/12/27 10:00:00,25.0
    2021/12/27 10:01:00,31.2
    2021/12/27 10:02:00,35.7
    2021/12/27 10:03:00,36.5
    
[/code]

補足:  
2022-01-18  
こちらのSQL文を実行すると"１つ以上の必要なパラメーターの値が設定されていません。"という実行時エラーが発生します。

[code]

    sql = "SELECT * FROM [Sheet1$] WHERE DATEPART(minute, InspectionDate) = 55"
    
[/code]

minuteを'で括ると実行時エラーが"プロシージャ呼び出しが正しくありません。"に変わりました。

[code]

    sql = "SELECT * FROM [Sheet1$] WHERE DATEPART('minute', InspectionDate) = 55"
    
[/code]

参照設定でMicrosoft AvtiveX Data Object 2.8 Libraryを設定しています。

このDLLからADODB.ConnectionとADODB.Recordsetを実装してSQLを実行しています。


CC BY-SA 4.0
2021-12-23T19:45:15.453
85308
2022-01-20T04:30:27.790
2022-01-20T04:30:27.790
49304
49304
question
sql vba
BETWEENで一定間隔のデータを抜き出すにはどうすれば良いのでしょうか？


1秒間隔のデータから1分ごとのデータを抽出したいならば、秒を固定するとよいです。  
また、1時間ごとのデータを抽出したいならば、分と秒の両方を固定する必要があります。

* * *

SQL の関数は RDBMS ごとに異なることがあるので、使っている RDBMS に合わせて都度調べる必要があります。

ACE プロバイダを利用している場合、  
分を指定したいならば

[code]

    SELECT * FROM [data.csv] WHERE dt BETWEEN ? AND ? AND DATEPART('n', dt) = 0;
    
[/code]

秒を指定したいのならば

[code]

    SELECT * FROM [data.csv] WHERE dt BETWEEN ? AND ? AND DATEPART('s', dt) = 0;
    
[/code]

でどうでしょうか

<https://support.microsoft.com/ja-
jp/office/datepart-%E9%96%A2%E6%95%B0-26868a79-5505-4e5a-8905-6001372223fa>


CC BY-SA 4.0
2022-01-19T09:29:36.783
85791
2022-01-19T09:29:36.783
20885
85308
answer


無事に解決できました。  
v..snowさん、コメントを下さった方々、ありがとうございます。  
最終的にこちらのSQL文で抽出したい部分のデータが抜けるようになりました。

[code]

    SELECT dt,ch1 FROM [data.csv] WHERE dt BETWEEN {日時1} AND {日時2} AND DATEPART('n', InspectionDate) = 0
    
[/code]

迷って部分としては、日時部分を#を括る必要がありました。  
これを怠ると"構文エラー：演算子がありません"とエラーが発生しました。


CC BY-SA 4.0
2022-01-20T04:30:02.123
85809
2022-01-20T04:30:02.123
49304
85308
answer