按日,周,年统计,无的数据补充0

需求:按日-周-年统计。统计涉及到3张表数据。
在这里插入图片描述在这里插入图片描述

写sql。先把3张表数据摘取出来,只需对3张表的时间做分组统计即可。
在这里插入图片描述
按日统计

select DAY(dateff) as time,IFNULL(count(id),0)as num
from(select create_time as dateff,id as id from cz_taxi_orders UNION ALL
select create_time as dateff,id as id from ctky_passenger_transport_order UNION ALL
select pay_time as dateff,id as id from bus_order) as a
GROUP BY time

按年统计

#按年 需求:统计最近十年数据
select YEAR(dateff) as time,IFNULL(count(id),0)as num
from(select create_time as dateff,id as id from cz_taxi_orders UNION ALL
select create_time as dateff,id as id from ctky_passenger_transport_order UNION ALL
select pay_time as dateff,id as id from bus_order) as a
WHERE YEAR(dateff)>year(now())-10
GROUP BY time

按周统计

select 
CASE temp.time 
WHEN 1 THEN '星期一' 
WHEN 2 THEN '星期二' 
WHEN 3 THEN '星期三' 
WHEN 4 THEN '星期四' 
WHEN 5 THEN '星期五' 
WHEN 6 THEN '星期六' 
WHEN 7 THEN '星期天' 
end as time,
IFNULL(temp2.num,0) as num 
from(
select 1 as time UNION all
SELECT 2 UNION all
SELECT 3 UNION all
SELECT 4 UNION all
SELECT 5 UNION all
SELECT 6 UNION all
SELECT 7) as temp
LEFT JOIN 
(select ifNULL(count(id),0) as num, 
CASE WEEKDAY(dateff) 
WHEN 0 THEN '1' 
WHEN 1 THEN '2' 
WHEN 2 THEN '3' 
WHEN 3 THEN '4' 
WHEN 4 THEN '5' 
WHEN 5 THEN '6' 
WHEN 6 THEN '7' 
END as `time` 
from(
SELECT create_time as dateff,id as id FROM cz_taxi_orders UNION ALL
SELECT create_time as dateff,id as id FROM ctky_passenger_transport_order UNION ALL
SELECT pay_time as dateff,id as id FROM bus_order) as a 
GROUP BY `time`) as temp2
ON temp.time = temp2.time 
ORDER BY temp.time asc;

组装动态sql。

<select id="queryPassengerFlow" resultType="com.xxxCockpitPassengerFlowChartVo">
        <if test="type=='WEEK'">
            select
            CASE temp.time
            WHEN 1 THEN '星期一'
            WHEN 2 THEN '星期二'
            WHEN 3 THEN '星期三'
            WHEN 4 THEN '星期四'
            WHEN 5 THEN '星期五'
            WHEN 6 THEN '星期六'
            WHEN 7 THEN '星期天'
            end as time,IFNULL(temp2.num,0) as num
            from(select 1 as time UNION all select 2 UNION all
            select 3 UNION all select 4 UNION all
            select 5 UNION all select 6 UNION all
            select 7) as temp
            LEFT JOIN
            (select ifNULL(count(id),0) as num,
            CASE WEEKDAY(dateff)
            WHEN 0 THEN '1'
            WHEN 1 THEN '2'
            WHEN 2 THEN '3'
            WHEN 3 THEN '4'
            WHEN 4 THEN '5'
            WHEN 5 THEN '6'
            WHEN 6 THEN '7'
            END as `time`
        </if>
        <if test="type=='DAY'">
            select count(id) as num,
            DAY(dateff) as `time`
        </if>
        <if test="type=='YEAR'">
            select YEAR(dateff) as `time`,
            count(id) as num
        </if>
        from(select create_time as dateff,id as id from cz_taxi_orders UNION ALL
        select create_time as dateff,id as id from ctky_passenger_transport_order UNION ALL
        select pay_time as dateff,id as id from bus_order) as a
        <if test="type=='WEEK'">
            GROUP BY `time`) as temp2
            on temp.time = temp2.time
            ORDER BY temp.time asc
        </if>
        <if test="type=='DAY'">
            GROUP BY `time`
        </if>
        <if test="type=='YEAR'">
            WHERE (YEAR(dateff))>year(now())-10
            GROUP BY `time`
        </if>
    </select>

剩余的年,日,用java代码补充。

@Override
    public R queryPassengerFlow(String type) {
    //一开始加载,不输入默认按天
        if (type==null){
            type="DAY";
        }
        List<CockpitPassengerFlowChartVo> list = cockpitChartMapper.queryPassengerFlow(type);
        List<CockpitPassengerFlowChartVo> list1 = new ArrayList<>();
        //年查询递推十年
        List<CockpitPassengerFlowChartVo> list2 = new ArrayList<>();
        if ("YEAR".equals(type)){
            Calendar cal = Calendar.getInstance();
            int currentYear = cal.get(Calendar.YEAR);
            cal.set(Calendar.YEAR,currentYear-9);
            int toYear = cal.get(Calendar.YEAR);
            for (int i = currentYear; i >= toYear; i--) {
                CockpitPassengerFlowChartVo vos = new CockpitPassengerFlowChartVo();
                boolean flag = false;
                for (CockpitPassengerFlowChartVo vo : list) {
                    if (vo.getTime().equals(String.valueOf(i))) {
                        flag = true;
                        //月份
                        vos.setTime(vo.getTime());
                        //数量
                        vos.setNum(vo.getNum());
                    }
                }
                //月份不存在 赋值0
                if (!flag) {
                    vos.setTime(String.valueOf(i));
                    vos.setNum(0);
                }
                list1.add(vos);
            }
            return R.ok(list1);
        }
        if ("DAY".equals(type)){
            for (int i = 1; i <=30 ; i++) {
                CockpitPassengerFlowChartVo vos = new CockpitPassengerFlowChartVo();
                boolean flag = false;
                for (CockpitPassengerFlowChartVo vo : list) {
                    if (vo.getTime().equals(String.valueOf(i))) {
                        flag = true;
                        //月份
                        vos.setTime(vo.getTime());
                        //数量
                        vos.setNum(vo.getNum());
                    }
                }
                //月份不存在 赋值0
                if (!flag) {
                    vos.setTime(String.valueOf(i));
                    vos.setNum(0);
                }
                list2.add(vos);
            }
            return R.ok(list2);
        }
        return R.ok(list);
    }

成功,接下来就是和前端规定type按日传DAY,按周传WEEK,按年传YEAR。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过列排斥能比较两组迭代次数

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让差值结构中有6个1, 行分布是0&#xff0c;1&#xff0c;1&#xff0c;1&#xff0c;1&#xff0c;2列分布是2&#xff0c;2&#xff0c;2.统计迭代次…

【单片机】msp430f5529 万年历,数字时钟,矩阵键盘修改时间,7针OLED显示,内部温度读取

文章目录 功能实物图原理图一些程序片段矩阵键盘内部温度读取将年月日转为星期 功能 1 显示万年历&#xff0c;利用内部RTC模块 2 按键修改时间 3 显示芯片内部的温度数值 实物图 原理图 一些程序片段 矩阵键盘 https://qq742971636.blog.csdn.net/article/details/1316505…

OpenCV使用ellipse()函数来绘制一个椭圆

/*** void ellipse(* InputOutputArray img, // 图像* Point center, // 椭圆原心* Size axes, // 椭圆x轴长度的一半,y轴长度的一半* double angle, // 椭圆旋转角度* double startAngle, // 起始角度* double endAngle, // 终止角度* const Scalar& color, // 椭圆颜色*…

Hexo博客部署腾讯云服务器

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 前端相关 ✨特色专栏&…

华为Harmony应用开发初探

HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体…

<Linux开发>驱动开发 -之- Linux I2C 驱动

&#xff1c;Linux开发&#xff1e;驱动开发 -之- Linux I2C 驱动 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过程详细…

springboot服务端接口公网远程调试,并实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

三个视频怎么合成一个视频?分享简单好用的合并方法

通过将多个视频合并成一个&#xff0c;可以将分散的内容整合在一起&#xff0c;形成一个连贯的故事或主题。这对于制作影片、剧集、纪录片或视频日志等需要综合多个片段的项目非常有用&#xff0c;可以产生更连贯和流畅的观看体验。那么怎么将视频进行合并呢&#xff1f;给大家…

外部中断实验(stm32)

目录 EXIT的相关代码exit.cexit.h LED的相关代码KEY的相关代码BEEP的相关代码main.cGPIO 跟中断线的映射关系图 说明&#xff1a;以下内容参考正点原子资料 EXIT的相关代码 exit.c void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitS…

pycharm如何给一串中文快捷加引号(方法二)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 商人重利轻别离&#xff0c;前月浮梁买茶去。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银群【此类生物】问了一个Pycharm基础的问题&a…

数据结构--哈夫曼树

数据结构–哈夫曼树 带权路径长度 结点的 权 \color{red}权 权:有某种现实含义的数值&#xff08;如:表示结点的重要性等) 结点的带权路径长度 \color{red}结点的带权路径长度 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数&#xff09;与该结点上权值的乘积 树的…

【玩转循环】探索Python中的无限可能性

前言 循环可能是每个编程语言中使用比较多的语法了&#xff0c;如果能合理利用好循环&#xff0c;就会出现意想不到的结果&#xff0c;大大地减少代码量&#xff0c;让机器做那些简单枯燥的循环过程&#xff0c;今天我将为大家分享 python 中的循环语法使用。&#x1f697;&am…

Neo4j图数据库的使用笔记

Neo4j图数据库的使用笔记 win系统安装Neo4j图数据库 安装准备&#xff1a; neo4j-3.4.0版本的zip包 找个目录解压安装zip包 启动neo4j 下载neo4j-3.4.0版本的zip包 可以去neo4j官网下载&#xff0c;也可以去微云数聚官网下载。 微云数聚是neo4j在国内的代理商。 解压到…

满汉楼项目

满汉楼项目 1. 满汉楼介绍 满汉楼是一个综合餐饮管理系统&#xff0c;其主要分为&#xff1a; 人事登记&#xff1a;各部门人员信息登录管理&#xff1a;员工号、姓名、职位、密码菜谱价格&#xff1a;菜谱及价格报表统计&#xff1a;统计销售额成本及库房&#xff1a;名称注…

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单 在之前实现了flutter聊天界面的富文本展示内容&#xff0c;这里记录一下当长按聊天气泡的时候弹出复制、删除等菜单功能 一、查看效果 当长按聊天气泡的时候弹出复制、删除等菜单&#xff0c;可新增更多按钮 二、代码实现…

2023/7/8总结

Tomcat 启动&#xff1a;双击bin目录下的startup.bat文件停止&#xff1a;双击bin目录下的shutdown.bat 文件访问 &#xff1a;http://localhost:8080&#xff08;默认是8080&#xff0c;可以修改&#xff09; git的使用 打开git bash git config --global user.name "名…

OpenCV读取一张深度图像并显示

#include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include

服务端研发提测模板

test环境分支自测通过 提测邮件标注test环境分支 【xxxxxx需求】服务端研发提测了&#xff0c;快去测试吧!

第十二章 elk

1、ELK可以帮助我们解决哪些问题 日志分布在多台不同的服务器上,业务一旦出现故障,需要一台台查看日志 单个日志文件巨大,无法使用常用的文本工具分析,检索困难; 2、架构设计分析 Filebeat和Logstash ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、i…

简述JMeter实现分布式并发及操作

为什么要分布式并发&#xff1f; JMeter性能实践过程中&#xff0c;一旦进行高并发操作时就会出现以下尴尬场景&#xff0c;JMeter客户端卡死、请求错误或是超时等&#xff0c;导致很难得出准确的性能测试结论。 目前知道的有两个方法可以解决JMeter支撑高并发&#xff1a; …