簡體   English   中英

如何進行預定的 MySql 查詢以在每小時的頂部選擇數據?

[英]How do I make a scheduled MySql query to pick data every top of the hour?

我有一張帶有時間戳(DATETIME)值的表。

表我的日志:

+----------+---------------------+--------+
+
| 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 |
+----------+---------------------+--------+

我有另一個表 (HourLog),它在每小時的頂部 (HH:00:00) 中從“MyLog”中提取“temp”值,其值的“timestamp”值最接近 HourLog 中的“timestamp”值(因為時間戳值不能總是恰好是 HH:00:00)。

小時日志:

+----------+---------------------+--------+
+
|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 中的時間戳值,獲取最接近當前小時的值,並將“temp”值插入帶有 (HH:00:00) 時間戳的 HourLog。

一個例子: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 |
+----------+---------------------+--------+

查詢選擇 logNo 102,因為它的時間戳值最接近小時的頂部 (18:00:00) 並將“temp”值插入 HourLog logNo 74

小時日志:

+----------+---------------------+--------+
+
| 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 中編寫這樣的預定查詢?

query.sql ,但嘗試創建一個像這樣的 SQL 文件,將其稱為query.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;

然后創建一個調用該文件的 shell 腳本( script.sh ):

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

然后你應該能夠像這樣調用一個 cron 作業:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM