6

1 つの datetime 列を持つ MySQL テーブルがあります。PHPスクリプトが大量のデータを取得するのを防ぎたいです。だから私は、MySqlクエリが1分程度の距離を持つ行のみを選択するという解決策を探しています。簡単なものはありますか、それとも毎回新しい mysql クエリを使用して for ループをコーディングする必要がありますか。

Example 
timestamp
2012-09-25 00:00:00-->
2012-09-25 00:00:50
2012-09-25 00:01:23
2012-09-25 00:01:30-->
2012-09-25 00:02:33
2012-09-25 00:02:40
2012-09-25 00:03:01-->i want those

前もって感謝します

4

3 に答える 3

1

これを試して :

SELECT create_time
FROM timeTable
WHERE create_time
IN (

SELECT min( create_time )
FROM timeTable
GROUP BY FROM_UNIXTIME( UNIX_TIMESTAMP( create_time ) - MOD( UNIX_TIMESTAMP( create_time ) , 60 ) );

使い方 :

i) ここでは 1 分 (60 秒) の間隔に丸められた datetime でテーブルをグループ化します。

ii) 各グループの一番上の行を取得します。

これは、データの適切なサンプリング基準になる可能性があります。このクエリは、次の点で最適化できます。

i) 日付 = REQUIRED DATE の where 句を配置し、日時全体ではなく時間 + 分で他の操作を行います。

ii) 間隔が 1 分の場合、タイムスタンプまたは date_format の部分文字列を試して、最も近い分に丸めることができます。

例えば。

SELECT create_time
FROM timeTable
WHERE create_time
IN (

SELECT min( create_time )
FROM timeTable
GROUP BY DATE_FORMAT( `create_time` , 'Y-M-D %H:%i' )
);
于 2012-09-26T06:26:49.227 に答える
1

これを試して

SET @time := '1000-01-01 00:00:00';
SET @interval := 60;

SELECT colDate
FROM table
WHERE TIMESTAMPDIFF( SECOND, @time, colDate ) >= @interval
    AND @time := colDate

使い方。

@interval は、現在の colDate と前の colDate の間に必要な時間差です。TIMESTAMPDIFF の最初のパラメーターは、間隔が使用する時間の単位を決定します。例: SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、または YEAR。

@time は前の colDate を追跡し、現在の行と比較されます。前の colDate と現在の colDate の差が間隔以上の場合は、含まれます。

于 2012-09-26T06:06:59.850 に答える
0

WHERE timestamp LIKE '%:30:00%'30秒ごとに取得します..

ただし、これはエントリが統一されている場合にのみ機能します..タイムスタンプがすべて均等に終了しない場合..私たちに知らせる必要があります.

編集

私はあなたがこれを探しているかもしれないと思います:

どのようにmysqlからn行ごとに選択しますか

于 2012-09-26T05:39:33.080 に答える