mysql 实现年月日按一段时间进行数据统计

 mysql 实现年月日按一段时间进行数据统计

1、 查询数据表组成时间列表

SELECT
    @cdate := DATE_ADD(@cdate, INTERVAL + 1 {1}) c_time,
    t0.id
FROM
    ( SELECT @cdate := DATE_ADD( '{2}', INTERVAL + 0 {1}), id FROM time_base ) t0 
LIMIT {3}
  • 1 按年月日可分为: YEAR, MONTH, DAY
  •  2 需要组的时间数据的起始日期例如(2021, 2021-06, 2021-06-01)
  • 3 需要组的时间数据的总数,例如(7(近七年,近七月,近七天))
  •  这里的time_base 表可以是任何表,只要数据总量足够大于时间列表总数即可,表中有无时间字段并没有什么影响。

mysql 实现年月日按一段时间进行数据统计_第1张图片

# 这里查询的时间结果没有按照所需要的格式进行显示,下面sql中会对查询的总体结果进行重新格式化

2、根据业务需求,对对应的数据表单进行数据筛选

select 
    DATE_FORMAT(a_t_w_h.create_time, '{0}') AS time,
    sum(a_t_w_h.use_water) as use_water
from 
    archive_total_water_header a_t_w_h
where 
    date_format(a_t_w_h.create_time, '{0}') between('{2}', '{4}')
group by 
    date_format(a_t_w_h.create_time, '{0}')
  •  0 时间格式化字符, 按年月日可分为:%Y, %Y-%m, %Y-%m-%d
  •  2 数据筛选的起始时间
  •  4 数据筛选的结束时间(上面3中的值其实就是4-2的值)

3、 将时间和数据进行分组并求和,平均等

SELECT
    DATE_FORMAT( t1.c_time, '{0}') AS t_time,
    IFNULL(t2.use_water, 0) as water
FROM
    (
    SELECT
        @cdate := DATE_ADD(@cdate, INTERVAL - 1 {1}) c_time,
        t0.id
    FROM
        ( SELECT @cdate := DATE_ADD( '{2}', INTERVAL + 1 {1}), id FROM time_base ) t0 
    LIMIT {3}
    ) t1
left join (
    select 
        DATE_FORMAT(a_t_w_h.create_time, '{0}') AS time,
        sum(a_t_w_h.use_water) as use_water
    from 
        archive_total_water_header a_t_w_h
    date_format(a_t_w_h.create_time, '{0}') between('{2}', '{4}')
    group by 
        date_format(a_t_w_h.create_time, '{0}')
)t2 on date_format(t1.c_time, '{0}') = t2.time
ORDER BY t1.c_time

mysql 实现年月日按一段时间进行数据统计_第2张图片

 

### 如有其他方法再与大家分享!!!

你可能感兴趣的:(mysql)