这是一种方法...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(year INT NOT NULL
,revenue INT NOT NULL
,organisation VARCHAR(12) NOT NULL
,PRIMARY KEY(year,organisation)
);
INSERT INTO my_table VALUES
(2010 ,83863 ,'asdf'),
(2011 ,5463 ,'asdf'),
(2012 ,45345 ,'asdf'),
(2009 ,32463 ,'ghjk'),
(2010 ,352667 ,'ghjk');
SELECT x.*
, ((x.revenue - z.revenue)/z.revenue) * 100 pct_diff
FROM my_table x
JOIN
( SELECT organisation
, MAX(year) max_year
FROM my_table
GROUP
BY organisation
) y
ON y.organisation = x.organisation
AND y.max_year = x.year
LEFT
JOIN my_table z
ON z.organisation = x.organisation
AND z.year = x.year - 1;
+------+---------+--------------+----------+
| year | revenue | organisation | pct_diff |
+------+---------+--------------+----------+
| 2010 | 352667 | ghjk | 986.3660 |
| 2012 | 45345 | asdf | 730.0384 |
+------+---------+--------------+----------+
这是运行历史的一个(慢)版本...
SELECT x.*
, ((x.revenue - y.revenue)/y.revenue) * 100 pct_diff
FROM my_table x
LEFT
JOIN my_table y
ON y.organisation = x.organisation
AND y.year = x.year - 1
ORDER
BY organisation
, year;
...如果有时间我会发布一个更快的替代方案(/记住如何)