[英]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.