Mysql 根据月份分组并返回分组中的所有数据

2023-05-16

现有数据如下:

交易描述 金额 时间

交易A 1000 2021-01-28
交易B 2000 2021-01-30
交易C 3000 2021-02-03
交易D 4000 2021-02-04
交易E 5000 2021-02-04
交易F 6000 2021-03-05

要求:查出交易流水信息,按时间分类倒序展示,例如:

2021年3月

交易F 2021-03-05 6000

2021年2月

交易C 2021-02-03 3000
交易D 2021-02-04 4000
交易E 2021-02-04 5000

2021年1月

交易A 2021-01-28 1000
交易B 2021-01-30 2000

刚开始想按照年月时间进行分组,但是分组后只能得到该分组的第一条数据。

SELECT 
    translation,
    translationDate,
    amount,
    DATE_FORMAT(translationDate,'%Y-%m') AS yearMonth
FROM datatable
GROUP BY yearMonth
ORDER BY translationDate desc;

交易描述 金额 时间 yearMonth

交易F 6000 2021-03-05 2021-03
交易E 5000 2021-02-04 2021-02
交易B 2000 2021-01-30 2021-01

由于本人sql水平有限,不知道如何向下扩展查询分组内所有的数据,于是最后决定按交易时间倒序查询所有数据后后端进行封装。

大致思路:

  • 使用Map封装数据,key 为对应的月份,value为月份下的交易流水列表;
  • 考虑到要按顺序保存月份,所以选择 LinkedHashMap;
  • 遍历按时间倒序查询的所有交易流水,判断年月的key是否相同,不同则更新key ,插入对应的数据;
SELECT 
    translation,
    translationDate,
    amount
FROM datatable
ORDER BY translationDate desc;
// 1. 倒序查询所有交易流水信息
List<TranslateInfo> list = translateInfoService.selectList(params);
// 2.1 封装数据,map的key为 年-月  value为 年月对应的数据列表
Map<String, List<TranslateInfo>> dataMap = new LinkedHashMap();
// 2.2 封装 value
List<TranslateInfo> dataList = new ArrayList();

// 获取第一个数据的时间日期
LocalDate date = list.get(0).getTransactionDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
// 第一个 key
String keyYearMonth = date.format(DateTimeFormatter.ofPattern("yyyy-MM"));

// 遍历所有数据,当时间日期不同于上面的时间日期时创建一个新的 List
for (TransactionInfo info : list) {
    String key = info.getTransactionDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM"));
    if (!keyYearMonth.equals(key)) {
        keyYearMonth = key;
        dataList = new ArrayList();
    }
    dataList.add(info);
    dataMap.put(keyYearMonth, dataList);
}

Map 可以封装为一个实体,用于添加更多列表特性数据(汇总等)。

大概思路:

  1. 先获取查询列表中第一个数据初始化响应列表和初始化分类;
  2. 进入查询列表循环,先获取分类,然后与初始化分类比对;
  3. 若不同,更新初始化时间分类,响应列表重新初始化为当前分类数据及初始化响应列表;
  4. 相同则持续添加当前分类数据到响应列表;
  5. 跳出循环,返回响应列表;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql 根据月份分组并返回分组中的所有数据 的相关文章

随机推荐

  • 万物互联-IOT-ESP8266功能、作用、AT、连接onenet服务器简单介绍

    万物互联 IOT ESP8266功能 作用 AT 连接onenet服务器简单介绍 1 ESP8266简介 1 1 ESP8266简介 ESP8266是一个完整且自成体系的 WiFi 网络解决方案 xff0c 能够独立运行 xff0c 也可以
  • 云应用系统开发技术考点(面试题相关)

    云应用系统开发技术考点 xff08 面试题相关 xff09 1 CAP理论 概述 xff1a 一个分布式系统最多只能同时满足一致性 xff08 Consistency xff09 可用性 xff08 Availability xff09 和
  • Linux常用命令大全(超详细分类版)

    Linux常用命令大全 xff08 持续收集 分类 xff09 文件操作 常用 cd home 进入 39 home 39 目录 39 cd 返回上一级目录 cd 返回上两级目录 cd 进入个人的主目录 cd user1 进入个人的主目录
  • 图的基本概念、存储及基本操作(邻接矩阵法与邻接表法)

    图的基本概念 存储及基本操作 邻接矩阵法与邻接表法 xff09 1 图的基本概念 1 1 图的定义 图 xff08 Graph xff09 是由顶点的有穷非空集合和顶点之间边的集合组成 xff0c 通常表示为 xff1a G V E xff
  • 深度优先搜索(DFS)与广度优先搜索(BFS)算法详解

    深度优先搜索 xff08 DFS xff09 与广度优先搜索 xff08 BFS xff09 详解 1 广度优先搜索算法 1 1 前言 和树的遍历类似 xff0c 图的遍历也是从图中某点出发 xff0c 然后按照某种方法对图中所有顶点进行访
  • 小程序微服务单个SSL证书部署多个项目解决方案

    小程序微服务单个SSL证书部署多个项目解决方案 玩过小程序的人 xff0c 都知道小程序上线的要求比较苛刻 xff0c 并不是上架审核苛刻 xff0c 而是前期的服务器上架比较麻烦 xff0c 需要配置SSL证书 xff0c 并且只能使用8
  • 二叉树详解及二叉树的遍历(递归与非递归C++算法实现)

    二叉树详解及二叉树的遍历 xff08 递归与非递归C 43 43 算法实现 xff09 二叉树简介 树 xff08 Tree xff09 是一种由多个节点组成的有限集合T xff0c 有且仅有一个节点称为根 xff08 root xff09
  • node.js及vue安装配置详解

    一 node js 安装配置 1 下载 首先先下载node js xff0c 通过以下链接进行选择下载 https nodejs org download release 选择自己想要的版本进行下载 2 安装 下载完成后双击node exe
  • BP神经网路详解(误差反向传播-链式求导法则)

    BP神经网络详解 简介 BP xff08 Back Propagation xff09 网络是1985年由Rumelhart和McCelland为首的科学家小组提出 xff0c 是一种按误差逆传播算法训练的多层前馈网络 xff0c 是目前应
  • OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failur

    OpenSSL error 14077410 SSL routines SSL23 GET SERVER HELLO sslv3 alert handshake failure Unable to establish SSL connect
  • CV和NLP不分家

    嗯 xff0c 好久没有登陆csdn了 xff0c 看了一下 xff0c 距离上一篇文章发表已经过去了整整半年的时间了 xff0c 消息堆叠了将近100条 也没办法一一回复了 xff0c 因为这么长时间过去了 xff0c 不知道大家的问题都
  • 2022-09-14-openstack介绍

    1 云计算介绍 计算 xff08 CPU 内存 xff09 存储和网络是 IT 系统的三类资源 通过云计算平台 xff0c 这三类资源变成了三个资源池 当需要虚机的时候 xff0c 只需要向平台提供虚机的规格 平台会快速从三个资源池分配相应
  • docker debian中apt-get源替换为阿里源

    场景 docker容器内安装太慢 xff0c 实在受不了这速度了 解决方案 将默认的debian源替换为阿里源 cat命令 因为默认不带vim 查看源配置文件 xff1a span class token function cat span
  • Spring整合Junit

    原始Junit测试Spring的问题 在测试类中 xff0c 每个测试方法都有以下两行代码 xff1a ApplicationContext ac 61 new ClassPathXmlApplicationContext 34 bean
  • STM32驱动舵机(附例程)

    一 PWM Mode xff1a 当计数值小于CRR寄存器值时输出为有效电平 xff0c 而有效电平要根据OCXInit来设置 xff0c 设置的有效电平为高则当CNT值小于设置的CRR寄存器值时输出有效电平高电平 xff0c 当CNT值大
  • Win10下安装Anaconda后,conda不是内部或者外部命令

    今天在安装TAnaconda时 xff0c 在开始 gt 运行 gt cmd时输入如下命令 xff1a conda version 时显示出错 xff0c cuda不是内部或者外部命令 xff1b 第一直觉就是去检查环境变量 xff0c 你
  • VM16-ubuntu16桥接网络频繁掉线

    故障说明 旧电脑使用的vm15 ubuntu16 xff0c 通过移植安装到新电脑 xff0c 后又通过升级把虚拟机升级到vm16 xff0c 更改网络连接的NAT模式到桥接模式 xff0c 发现网络即使出现正常连接的图标和正确的IP地址但
  • IPTV机顶盒刷机过程--山东电信【天邑TY608】

    IPTV机顶盒刷机过程 山东电信 天邑TY608 准备工具拆机过程开始刷机 准备工具 双公头USB数据线 刷机小板 xff0c 我用的是淘宝买的USB转TTL的CH340G的小板 电烙铁 焊锡丝 焊锡膏 单排排针 拆机过程 这个型号的机顶盒
  • OpenStack Availability Zone和Aggregate Hosts理解

    1 availability zone az是在region范围内的再次切分 xff0c 只是工程上的独立 xff0c 例如可以把一个机架上的机器划分在一个az中 xff0c 划分az是为了提高容灾性和提供廉价的隔离服务 选择不同的regi
  • Mysql 根据月份分组并返回分组中的所有数据

    现有数据如下 xff1a 交易描述 金额 时间 交易A 1000 2021 01 28 交易B 2000 2021 01 30 交易C 3000 2021 02 03 交易D 4000 2021 02 04 交易E 5000 2021 02