难以使用 LAG 获得每月进度百分比

Difficulty using LAG to get monthly progress percentage

我在下面有以下 table,我想获取每月总交易量的月度变化 (%)。我研究了 LAG 函数,但不是很了解。

我需要这个查询的 return 是这样的(期望的输出):

MONTH | TOTAL TRANSACTIONS  | % EVOLUTION
----------------------------------------
09    | 45.561              | 0%
10    | 48.598              | 6.66%

更新

% EVOLUTION = ((current value - previous value) / previous value) * 100

这是我用来计算交易数量从一个月到上个月的演变的公式。 也就是说,需要包含上个月总计的列。

DDL

CREATE TABLE IF NOT EXISTS `campanha` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ano_mes` date DEFAULT NULL,
  `nome` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `cpf` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `conta` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `valor` float(10,2) UNSIGNED ZEROFILL NOT NULL,
  `transacoes` int(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

有人能帮帮我吗?

MySQL 版本:5.7.23 - MySQL 社区服务器

http://sqlfiddle.com/#!9/73f38f/2

MySQL5.x不支持LAG等window函数。你必须用老方法来做。基于 table 结构,以下查询应该可以帮助您入门:

SELECT yyyy
     , mm
     , txn_this_month
     , (txn_this_month - (
           SELECT SUM(transacoes)
           FROM campanha
           WHERE ano_mes >= STR_TO_DATE(CONCAT_WS('-', yyyy, mm, 1),'%Y-%c-%e') - INTERVAL 1 MONTH
           AND   ano_mes <  STR_TO_DATE(CONCAT_WS('-', yyyy, mm, 1),'%Y-%c-%e')
       )) / txn_this_month * 100 AS perc_change
FROM (
    SELECT EXTRACT(YEAR FROM ano_mes) AS yyyy
         , EXTRACT(MONTH FROM ano_mes) AS mm
         , SUM(transacoes) AS txn_this_month
    FROM campanha
    GROUP BY EXTRACT(YEAR FROM ano_mes), EXTRACT(MONTH FROM ano_mes)
) AS x
ORDER BY yyyy, mm

select 中的子查询计算每行上个月的总和。