【问题标题】:Difficulty using LAG to get monthly progress percentage使用 LAG 获取每月进度百分比的难度
【发布时间】:2020-03-23 02:58:32
【问题描述】:

我有下表,并想了解每月总交易量的每月演变 (%)。我研究了LAG函数,但不是很了解。

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

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

更新

% EVOLUTION = ((当前值 - 先前值) / 先前值) * 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

【问题讨论】:

  • 有人请吗?
  • 你的Mysql版本不支持LAG功能。发布示例数据和该数据的预期输出以澄清。
  • 您提供了示例结构和您想要的内容,但也有助于编辑原始帖子并显示一些示例数据,显示进化和总交易的积累。你进化百分比的基础是什么。请在您的编辑过程中澄清这一点。
  • 好的,这个细节真的错过了,抱歉。发布更新

标签: mysql aggregate-functions window-functions mysql-5.7


【解决方案1】:

MySQL 5.x 不支持LAG 等窗口函数。您将不得不以旧方式进行操作。根据表结构,以下查询应该可以帮助您入门:

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 中的子查询为每一行计算上个月的总和。

【讨论】:

  • 我明天早上要去上班测试。只需从那里访问数据库即可。
  • 我在这里测试过,它工作正常。这正是我想要的。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 2015-06-28
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多