BETWEENで一定間隔のデータを抜き出すにはどうすれば良いのでしょうか？


現在、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を実行しています。




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>




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>

