CREATE TABLE temperature_log
(ID INT NOT NULL,dt DATETIME NOT NULL, temperature DECIMAL(5,2) NOT NULL);
INSERT INTO temperature_log VALUES
(119950 ,'2013-03-27 07:56:05',27.25),
(119951 ,'2013-03-27 07:57:05', 27.50),
(119952 ,'2013-03-27 07:58:05', 27.60),
(119953 ,'2013-03-27 07:59:05', 27.80),
(119954 ,'2013-03-27 08:00:05', 27.70),
(119955 ,'2013-03-27 08:01:05', 27.50),
(119956 ,'2013-03-27 08:02:05', 27.25),
(119957 ,'2013-03-27 08:03:05', 27.10),
(119958 ,'2013-03-27 08:04:05', 26.9),
(119959 ,'2013-03-27 08:05:05', 27.1),
(119960 ,'2013-03-27 08:06:05', 27.25),
(119961 ,'2013-03-27 08:07:05', 27.6);
SELECT x.*
, x.temperature - y.temperature diff
, COUNT(*) cnt
,(x.temperature-y.temperature)/COUNT(*) trend
FROM temperature_log x
JOIN temperature_log y
ON y.id < x.id
GROUP
BY x.id;
+--------+---------------------+-------------+-------+-----+-----------+
| ID | dt | temperature | diff | cnt | trend |
+--------+---------------------+-------------+-------+-----+-----------+
| 119951 | 2013-03-27 07:57:05 | 27.50 | 0.25 | 1 | 0.250000 |
| 119952 | 2013-03-27 07:58:05 | 27.60 | 0.35 | 2 | 0.175000 |
| 119953 | 2013-03-27 07:59:05 | 27.80 | 0.55 | 3 | 0.183333 |
| 119954 | 2013-03-27 08:00:05 | 27.70 | 0.45 | 4 | 0.112500 |
| 119955 | 2013-03-27 08:01:05 | 27.50 | 0.25 | 5 | 0.050000 |
| 119956 | 2013-03-27 08:02:05 | 27.25 | 0.00 | 6 | 0.000000 |
| 119957 | 2013-03-27 08:03:05 | 27.10 | -0.15 | 7 | -0.021429 |
| 119958 | 2013-03-27 08:04:05 | 26.90 | -0.35 | 8 | -0.043750 |
| 119959 | 2013-03-27 08:05:05 | 27.10 | -0.15 | 9 | -0.016667 |
| 119960 | 2013-03-27 08:06:05 | 27.25 | 0.00 | 10 | 0.000000 |
| 119961 | 2013-03-27 08:07:05 | 27.60 | 0.35 | 11 | 0.031818 |
+--------+---------------------+-------------+-------+-----+-----------+
順便說一句,如果你有興趣獲得每小時平均結果,你可以做這樣的事情...
SELECT DATE_FORMAT(x.dt,'%Y-%m-%d %h:00:00')
, AVG(x.temperature) avg_temp
FROM temperature_log x
GROUP
BY DATE_FORMAT(x.dt,'%Y-%m-%d %h:00:00');
觀察到的所有這些差異的總和等於之間的差異初始值和最終值。因此百分比變化可以從'final/initial - 1'獲得 - 例如, '27.6/27.25 - 1 = = + 1.28%'。 – eggyal
謝謝,但上表只是一個例子。這是一個例外。一般來說這些數值將會遍佈整個地方,所有差異的總和不會等於初始和最終之間的差異。 – Ossama
否 - 由於加法的相關性,所有差異的總和將總是*等於初始和最終之間的差異。 – eggyal