比较两个最后一行的值

时间:2013-12-19 10:11:51

标签: mysql sql

我有一个包含库存数据的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
+--------------+-------------------+

我需要计算两个最后一行之间的差异,每季度的值和百分比

  • 今天,预期的结果是+7600(+ 40%)(四舍五入)
  • 下个季度,预期结果为-6600(-25%)(四舍五入)

提前谢谢。

2 个答案:

答案 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 |