mysql日累积 月累积 季累积 年累季 生成时间维度

select detail_id,DATE_FORMAT(create_date,'%Y-%m-%d') date ,sum(diff_data) from report where detail_id in (3304) and DATE_FORMAT(create_date,'%Y-%m-%d') = '2020-12-18' group by detail_id order by date asc ;

select detail_id,DATE_FORMAT(create_date,'%Y-%m') date ,sum(diff_data) from report where detail_id in (3304) and DATE_FORMAT(create_date,'%Y-%m') = '2020-12' group by detail_id order by date asc ;


select detail_id,CONCAT(YEAR(create_date),'_',quarter(create_date)) date ,sum(diff_data) from report 
where detail_id in (3304) and CONCAT(YEAR(create_date),'_',quarter(create_date)) = '2020_4' group by detail_id order by date asc ;

select detail_id,DATE_FORMAT(create_date,'%Y') date ,sum(diff_data) from report where detail_id in (3304) and DATE_FORMAT(create_date,'%Y') = '2020' group by detail_id order by date asc ;

1.建立时间维度表

CREATE TABLE num (i int);-- 创建一个表用来储存0-9的数字

INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,方便以后计算时间



CREATE TABLE  if not exists calendar(datelist date); -- 生成一个存储日期的表,datalist是字段名



-- 这里是生成并插入日期数据

INSERT INTO calendar(datelist) SELECT

    adddate(

        (   -- 这里的起始日期,你可以换成当前日期

            DATE_FORMAT("2016-1-1", '%Y-%m-%d') 

        ),

        numlist.id

    ) AS `date`

FROM

    (

        SELECT

            n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
        FROM

            num n1

        CROSS JOIN num AS n10

        CROSS JOIN num AS n100

        CROSS JOIN num AS n1000

        CROSS JOIN num AS n10000

    ) AS numlist;

2.删除num表
删除 calendar表中的数据2030年之后

 DELETE from calendar where datelist>'2030-03-14'

3.将datelist设为主键
在这里插入图片描述
4。sql

select a.date,b.detail_id,b.instant from calendar a left join (
SELECT detail_id, DATE_FORMAT(create_date,'%Y-%m-%d') date,sum(diff_data) instant from  report where detail_id in (3304) and DATE_FORMAT(create_date,'%Y-%m-%d') = '2020-12-16'


) b on  a.date=b.date where a.date='2020-12-16'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_38325017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值