echarts图表页面,sql 按日,周,月统计

首先先说需求,页面echarts图形控件,需要根据时间跨度间隔不同,页面不知如何实现不同时间跨度,所以用sql实现,
数据库表接口,日期字段是day 格式是vachar(2),统计字段userAdd
如果你表内时间字段格式是date类型的就不用to_date(day,‘YYYY-MM-dd’)转换了,

1.按天统计sql语句很好写
传入参数,开始时间startDate,结束时间endDate,统计类型type

 select userAdd,day
    from tableName where day >= #{startDate} and day  #{endDate}

结果如图echarts图表页面,sql 按日,周,月统计_第1张图片
2.按周统计
查询出来是自然周,也就是一年的第几周

select to_char(to_date(day,'YYYY-MM-dd'),'iw') AS day,sum(userAdd) as userAdd
from tableName 
WHERE   day >='2019-07-09' and day <='2019-08-05'  
group by to_char(to_date(day,'YYYY-MM-dd'),'iw')  
ORDER BY day;  

结果如图,第28周,第29周
echarts图表页面,sql 按日,周,月统计_第2张图片
或者可以查出天

select to_char(next_day(to_date(day, 'yyyy-MM-dd') + 15 / 24 - 7, 2), 'YYYY-MM-DD') AS day,
                  sum(userAdd)      as userAdd
           from tableName 
           where day >= '2019-07-09'
             and day <= '2019-08-05'
           group by to_char(next_day(to_date(day, 'yyyy-MM-dd') + 15 / 24 - 7, 2), 'YYYY-MM-DD')
           ORDER BY day

如图
echarts图表页面,sql 按日,周,月统计_第3张图片
3.按月统计,与自然周一样只要把iw改成MM,所以也可以用同一个sql,用${}注入进去

select to_char(to_date(day,'YYYY-MM-dd'),'MM') AS day,sum(userAdd) as userAdd
    from tableName 
    WHERE   day >='2019-07-09' and day <='2019-08-05'  
    group by to_char(to_date(day,'YYYY-MM-dd'),'MM')  
    ORDER BY day;  

结果如图,7月份8月份
echarts图表页面,sql 按日,周,月统计_第4张图片
衍伸小知识
iw,MM,还可以统计年换成YYYY
其中参数意思如下,
dd—————–日(可以传递MM-dd,方便排序);
iw —————–周;
MM—————月;
YYYY————–年;

你可能感兴趣的:(java)