MYSQL求月份同比数据和环比数据

news2024/9/27 6:17:14

1.需求题目如下 

22f42bfc27c0487793f8f8ff6eee737c.jpeg

1.首先求出每月每个account_id 对应的amount金额

 2f0efb36446544d0b5e55a500f759764.png

2.利用表自关联,获取上月,上年对应月份及金额,

关联条件利用 主表月份-1个月=上月月份 和 主表月份-1年=上年月份

70b9261cd5854f588cb3dcf520dffb88.png

3.最后求同比和环比

 b224ab3addc14daa8a7ba427920f92f8.png

附代码及测试数据

CREATE TABLE transactions (  
    transaction_id VARCHAR(255),  
    account_id VARCHAR(255),  
    amount DECIMAL(10, 2),  
    transaction_date DATE  
);

INSERT INTO transactions (transaction_id, account_id, amount, transaction_date) VALUES  
('0C', 'C1', 100.00, '2021-01-15'),  
('10', 'C1', 150.00, '2021-02-15'),  
('01', 'C2', 200.00, '2021-03-15'),  
('02', 'C2', 250.00, '2021-04-15'),  
('03', 'C1', 300.00, '2022-01-20'),  
('04', 'C1', 350.00, '2022-02-20'),  
('05', 'C2', 400.00, '2021-02-18'),  
('06', 'C2', 450.00, '2021-03-18'),  
('07', 'C1', 500.00, '2021-04-18'),  
('08', 'C2', 550.00, '2022-02-18');


WITH MonthlyTotals AS (
    SELECT
        account_id,
        substr(transaction_date,1,7) AS month_year,
        SUM(amount) AS total_amount
    FROM
        transactions
    GROUP BY
        account_id,
        substr(transaction_date,1,7)
),
LaggedMonthlyTotals AS (
    SELECT
        mt.account_id,
        mt.month_year,
        mt.total_amount,
				sy.month_year as month_year_sy,
				sn.month_year as month_year_sn,
        sy.total_amount as prev_month_amount,
				sn.total_amount as prev_year_same_month_amount
    FROM
        MonthlyTotals mt
				left join MonthlyTotals sy on mt.account_id=sy.account_id and DATE_FORMAT(  
    DATE_SUB(STR_TO_DATE(CONCAT(mt.month_year, '-01'), '%Y-%m-%d'), INTERVAL 1 Month ), '%Y-%m')=sy.month_year
				left join MonthlyTotals sn on mt.account_id=sn.account_id and DATE_FORMAT(  
    DATE_SUB(STR_TO_DATE(CONCAT(mt.month_year, '-01'), '%Y-%m-%d'), INTERVAL 1 YEAR ), '%Y-%m')=sn.month_year
)
SELECT
    lmt.account_id,
    lmt.month_year,
    lmt.total_amount,
    -- 计算环比百分比
    CASE
        WHEN lmt.prev_month_amount IS NULL THEN NULL
        ELSE ((lmt.total_amount - lmt.prev_month_amount) / lmt.prev_month_amount) * 100
    END AS 环比,
    -- 计算同比百分比
    CASE
        WHEN lmt.prev_year_same_month_amount IS NULL THEN NULL
        ELSE ((lmt.total_amount - lmt.prev_year_same_month_amount) / lmt.prev_year_same_month_amount) * 100
    END AS 同比
FROM
    LaggedMonthlyTotals lmt
		order by account_id,month_year
		;
		

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML·第3章 表格布局与表单交互

3.1 表格概述 3.1.1 表格的结构 表格是由行和列组成的二维表,而每行又由一个或多个单元格组成,用于放置数据或其他内容。表格中的单元格是行与列的交叉部分,是组成表格的最基本单元。单元格的内容是数据,也称数据单元格。数据单元…

如何在 macOS(MacBook Pro、Air 和 iMac)上恢复未保存的 Word 文档

Microsoft Word 在许多用户中很受欢迎,并且有多种用途。无论是为学校写论文、在办公室写报告还是其他许多事情。但是不保存文档并丢失数据可能是您可能面临的最可怕的噩梦。但是,也有几种方法可以在 macOS 上恢复未保存的 Word 文档。 用户在 Windows P…

【C++笔试强训】如何成为算法糕手Day5

学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:游游的you 思路: 第二题:腐烂的苹果 思路: 第三题:孩子们的游戏 思路&…

RabbitMQ下载安装运行环境搭建

RabbitMQ运行环境搭建 1、Erlang及RabbitMQ安装版本的选择2、下载安装Erlang2.1、下载Erlang2.2、安装Erlang2.2.1、安装Erlang前先安装Linux依赖库2.2.2、解压Erlang压缩包文件2.2.3、配置2.2.4、编译2.2.5、安装2.2.6、验证erlang是否安装成功 3、RabbitMQ下载安装3.1、下载3…

基于SSM+小程序的医院核酸检测服务管理系统(医院2)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的医院核酸检测服务管理系统实现了管理员、用户管理、普通管理员、医护人员。 1、管理员实现了首页、用户管理、医护人员管理、普通管理员、通知公告管理、疫苗接种管理、核…

2023_Spark_实验九:编写WordCount程序(Scala版)

需求: 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤: 文件单词规律(空格分开)单词切分单词的统计(k,v)->(k:单词,V:数量)打印 框架: 单…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…

毕业设计选题:基于ssm+vue+uniapp的鲜花销售小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

uniapp EChars图表

1. uniapp EChars图表 (1)Apache ECharts 一个基于 JavaScript 的开源可视化图表库   https://echarts.apache.org/examples/zh/index.html (1)官网图例 (2)个人实现图例 1.1. 下载echart 1.1.1. 下…

新手教学系列——系统模块划分原则:如何让系统架构更加灵活与高效

在现代软件开发中,模块化设计是一个至关重要的概念。对于初学者来说,理解如何合理划分系统模块不仅能提高代码的可读性,还能让系统架构更具灵活性和可维护性。本文将深入探讨模块划分的基本原则,结合功能边界和数据边界的划分实例,帮助大家在实际开发中掌握模块化设计的精…

高校竞赛管理系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大,容错率低&am…

828华为云征文 | 华为云Flexus云服务器X实例搭建Zabbix网络设备监视系统(Ubuntu服务器运维)

前言 Flexus X实例内嵌智能应用调优算法,性能强悍,基础模式GeekBench单核及多核跑分可达同规格独享型实例的1.6倍,性能模式更是超越多系列旗舰型云主机,为企业业务提供强劲动力。 💼 Flexus X Zabbix:打造…

Spring Boot 快速入门教程

1. Spring Boot 简介 Spring Boot 是一个基于 Spring 框架的项目,它简化了基于 Spring 的 Java 应用程序的创建和部署。Spring Boot 通过提供一系列的“Starters”来简化 Maven 配置,同时使用约定大于配置的原则,让开发者能够以最少的配置启…

计算机视觉硬件整理(四):相机与镜头参数介绍

文章目录 前言一、工业相机常用分类二、工业相机的基本参数三、工业相机的接口四、工业镜头的参数五、工业镜头的选择要点 前言 随着科技的飞速发展,工业自动化和智能制造在当今社会扮演着越来越重要的角色。在这个背景下,工业相机作为一种关键的视觉检…

C# 委托(Delegate)一

一.Delegate的定义说明: C# 中的委托(Delegate)就是类似于 C 或 C 中函数的指针。Delegate 是存有对某个方法引用的一种引用类型变量,引用可在运行时是可以被改变的,特别适用于实现事件和回调方法。所有的Delegate都是…

微服务MongoDB解析部署使用全流程

1、什么是MongoDB 1、非关系型数据库 NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问…

H5响应式的文化传媒娱乐公司HTML网站模板源码

源码名称:响应式的文化传媒娱乐公司HTML网站模板源码 源码介绍:一款自适应H5文化传媒娱乐公司官网源码,源码带有6个H5页面,可用于文化传媒和娱乐公司官网。 需求环境:H5 下载地址: https://www.51888w.c…

【漏洞复现】天融信 运维安全审计系统 synRequest.do 远程命令执行漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

深度学习:自然语言处理的基本原理

概念: 自然语言处理(Natural Language Processing,简称NLP)是人工智能和语言学领域的一个分支,它致力于研究如何让计算机能够理解、解释和生成人类语言,以及如何实现人与计算机之间的有效通信。自然语言处理…

【AndroidStudio】关于AndroidStudio的常见控件TextView和Button

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;AndroidStudio 1.常见控件TextView 1.1基本信息 TextView主要用于在界面上显示一段文本信息。最基本的代码格式如下&#xff1a; <TextView android:id"id/text_vie…