2016-05-10 1 views
2

タイムスタンプ付きの(DATETIME)値を持つテーブルが1つあります。スケジュールされたMySqlクエリを作成して1時間ごとにデータを選択するにはどうすればよいですか?

表MyLog:有し値と

+----------+---------------------+--------+ 
+ 
| logNo | timestamp   | temp | 
| 
+----------+---------------------+--------+ 
+ 
|  1 | 2016-04-24 15:57:56 | 29.6 | 
| 
|  2 | 2016-04-24 16:59:24 | 29.7 | 
| 
|  3 | 2016-04-24 18:01:52 | 29.6 | 
| 
|  4 | 2016-04-24 18:59:20 | 29.6 | 
+----------+---------------------+--------+ 

私は別のテーブル 'MyLog' 時間ごと上から(00:00 HH)を 'TEMP' 値を引っ張る(HourLog)を有しますTimeLogの 'timestamp'値に最も近い 'timestamp'の値です(タイムスタンプの値が常にHH:00:00になるとは限らないため)。

HourLog:

+----------+---------------------+--------+ 
+ 
|logNo  | timestamp   | temp | 
| 
+----------+---------------------+--------+ 
+ 
|  1 | 2016-04-24 00:00:00 | 29.6 | 
| 
|  2 | 2016-04-24 01:00:00 | 29.7 | 
| 
|  3 | 2016-04-24 02:00:00 | 29.6 | 
| 
|  4 | 2016-04-24 03:00:00 | 29.6 | 
| 
|  5 | 2016-04-24 04:00:00 | 29.7 | 
| 
|  6 | 2016-04-24 05:00:00 | 29.8 | 
| 
|  7 | 2016-04-24 06:00:00 | 30.2 | 
| 
|  8 | 2016-04-24 07:00:00 | 30.1 | 
| 
|  9 | 2016-04-24 08:00:00 | 30.1 | 
| 
|  10 | 2016-04-24 09:00:00 | 30.1 | 
| 
|  11 | 2016-04-24 10:00:00 | 30.0 | 
| 
|  12 | 2016-04-24 11:00:00 | 30.1 | 
| 
|  13 | 2016-04-24 12:00:00 | 30.1 | 
| 
|  14 | 2016-04-24 13:00:00 | 29.9 | 
| 
|  15 | 2016-04-24 14:00:00 | 29.8 | 
| 
|  16 | 2016-04-24 15:00:00 | 29.6 | 
| 
|  17 | 2016-04-24 16:00:00 | 29.6 | 
| 
|  18 | 2016-04-24 17:00:00 | 29.7 | 
| 
|  19 | 2016-04-24 18:00:00 | 29.6 | 
| 
|  20 | 2016-04-24 19:00:00 | 29.6 | 
+----------+---------------------+--------+ 

私が書きたいクエリは、MyLog内のタイムスタンプ値を見ることができるよう、現在の時間に最も近い値を取得してHourLogに「TEMP」値を差し込む必要があります(HH:00:00)タイムスタンプ。

例: MyLog

+----------+---------------------+--------+ 
+ 
| logNo | timestamp   | temp | 
| 
+----------+---------------------+--------+ 
+ 
|  101 | 2016-04-24 17:57:56 | 29.6 | 
| 
|  102 | 2016-04-24 17:59:24 | 29.7 | 
| 
|  103 | 2016-04-24 18:01:52 | 29.6 | 
| 
|  104 | 2016-04-24 18:04:20 | 29.6 | 
+----------+---------------------+--------+ 

タイムスタンプ値は、時間(18時00分00秒)の上部に最も近いとHourLog logNoに「TEMP」値をプラグのでクエリlogNo 102を選択します74

HourLog:

+----------+---------------------+--------+ 
+ 
| logNo | timestamp   | temp | 
| 
+----------+---------------------+--------+ 
+ 
|  71 | 2016-04-24 15:00:00 | 28.6 | 
| 
|  72 | 2016-04-24 16:00:00 | 28.7 | 
| 
|  73 | 2016-04-24 17:00:00 | 30.1 | 
| 
|  74 | 2016-04-24 18:00:00 | 29.6 | 
+----------+---------------------+--------+ 

は、どのように私はMySQLで、このようなスケジュールされたクエリを書くことができますか?私と一緒に

+1

cronジョブを使用できます。このようなcronジョブを呼び出すことができます。 – jpodwys

答えて

1

ベアが、query.sqlそれを呼び出すこのようなSQLファイルを作成してみてください:

SET @n = NOW(); 

INSERT INTO HourLog 

SELECT 0, @n, X.temp (
    SELECT 
     TIMESTAMPDIFF(SECOND, timestamp, @n) diff, 
     temp 
    FROM MyLog 
    ORDER BY diff ASC 
    LIMIT 1 
) X; 

を次にファイル(script.sh)ことを呼び出すシェルスクリプトの作成:

mysql --login-path=[your login path] [your database] < /path/to/query.sql 

次に、あなたがすべきを

0 * * * * /path/to/script.sh 
+0

TIMESTAMPDIFF(タイムスタンプ、@n)diff MyLogから ORDER BY diffLIMIT 1 MyLogの最新のタイムスタンプと現在のタイムスタンプの間の差が最も小さい値を取得しますか? 何がありますか SELECT HOUR(@n)+ 1、@n、X.temp(..)X;行う? なぜ+1ですか? –

+0

最初のテーブルから 'HourLog'に' hour'カラムがあるように見えました。それは今日の時間か主キーですか? –

+0

申し訳ありませんが、間違いでした。それはプライマリキー、 'LogNo' ...私はエラーを修正しました –

関連する問題