我有一个包含库存数据的mysql表,每个季度我都添加一行,最后收集的值。
今天:
+--------------+-------------------+ | Quarter | Value | +--------------+-------------------+ |2012.Q4 |17000 | |2013.Q1 |18000 | |2013.Q2 |19000 |x |2013.Q3 |26600 |x +--------------+-------------------+
下个季度,我会得到
+--------------+-------------------+ | Quarter | Value | +--------------+-------------------+ |2012.Q4 |17000 | |2013.Q1 |18000 | |2013.Q2 |19000 | |2013.Q3 |26600 |x |2014.Q1 |20000 |x +--------------+-------------------+
我需要计算两个最后一行之间的差异,每季度的值和百分比
提前谢谢。
答案 0 :(得分:1)
MySQL没有像窗口函数这样的奢侈品,但你可以使用相关的子查询来查找某些项目。
SELECT
previous_quarter.value AS previous_value,
current_quarter.value AS current_value,
current_quarter.value - previous_quarter.value AS change_in_value
FROM
yourTable AS current_quarter
INNER JOIN
yourTable AS previous_quarter
ON previous_quarter.quarter = (SELECT MAX(yourTable.quarter)
FROM yourTable
WHERE yourTable.quarter < current_quarter.quarter
)
WHERE
current_quarter.quarter = (SELECT MAX(yourTable.quarter)
FROM yourTable
)
答案 1 :(得分:1)
你可以这样试试
SELECT SUM(CASE WHEN rnum = 2 THEN -1 * value ELSE value END) diff_value,
ROUND(SUM(CASE WHEN rnum = 2 THEN -1 * value ELSE value END) /
SUM(CASE WHEN rnum = 1 THEN 0 ELSE value END) * 100) diff_percent
FROM
(
SELECT quarter, value, @n := @n + 1 rnum
FROM table1 CROSS JOIN (SELECT @n := 0) i
ORDER BY quarter DESC
LIMIT 2
) q
以下是 SQLFiddle 演示(当前季度) 输出:
| DIFF_VALUE | DIFF_PERCENT | |------------|--------------| | 7600 | 40 |
以下是 SQLFiddle 演示(下个季度) 输出:
| DIFF_VALUE | DIFF_PERCENT | |------------|--------------| | -6600 | -25 |