mysql 统计指定月份每天的数据

之前为这个问题困扰了半天,搁网上找了半天解决方案,基本上都是单独建一张日期表进行联查。但我感觉很low,但是我又很菜,于是就疯狂找文章看。

于是无意间翻到过一篇文章,具体链接忘记了(PS:侵删),一段sql满足了我的需求,这里记录一下。(PS:我也看不懂啥意思)

select @d:=@d+1 number,
DATE_SUB(DATE_FORMAT('2020-9-02','%Y-%m-%d'),INTERVAL DAYOFMONTH(DATE_FORMAT('2020-9-02','%Y-%m-%d'))-@d DAY) time
from
(select 1 UNION ALL select 2 UNION ALL select 3 UNION ALL select 4) a,
(select 1 UNION ALL select 2 UNION ALL select 3 UNION ALL select 4) b,
(select 1 UNION ALL select 2) c,
(select @d:=0) d
where @d < day(LAST_DAY(DATE_FORMAT('2020-9-02','%Y-%m-%d')))

大致上就利用了这段脚本,去跟业务表进行联查,完成了任务。

具体sql如下:

SELECT
      IFNULL(sum(c.final_price),0) as actingMember,
      concat(a.number,'号') as day
      FROM
      (
      select @d:=@d+1 number,
      DATE_SUB(DATE_FORMAT(#{monthDate,jdbcType=VARCHAR},'%Y-%m-%d'),INTERVAL DAYOFMONTH(DATE_FORMAT(#{monthDate,jdbcType=VARCHAR},'%Y-%m-%d'))-@d DAY) time
      from
      (se
给出一个简单的 MySQL 亿级数据统计查询的例子,假设我们有一个包含 10 亿条用户行为数据的表 user_behavior,其中每条数据包含用户ID、行为类型、行为时间等字段。现在我们需要统计每个用户在指定时间段内的行为数量,可以按照以下步骤进行: 1. 根据用户ID将数据分散到多个表中,例如可以按照用户ID的哈希值将数据分散到 1000 个表中。这样可以减少单个表的数据量,提高查询效率。 2. 对于每个表,创建按照时间字段的索引,以便进行快速查询。 3. 在进行查询前,先预处理需要查询数据,例如可以将数据按照日期进行汇总,并将汇总结果存储在专门的统计表中。 4. 对于查询语句,可以使用分组查询和聚合函数进行统计,例如: ```sql SELECT user_id, COUNT(*) AS behavior_count FROM user_behavior_1 WHERE behavior_time >= '2021-01-01' AND behavior_time < '2021-01-31' GROUP BY user_id; ``` 这个查询语句会统计 2021 年 1 月份每个用户的行为数量,并按照用户ID进行分组。 5. 在查询时可以使用数据查询缓存,以提高查询效率。如果查询缓存未命中,可以考虑使用数据库分区、分布式查询等方式提高查询效率。 总之,处理亿级数据统计查询需要综合考虑数据库架构设计、数据预处理、查询优化等多个方面。以上是一个简单的例子,具体的实现方式会根据数据量、数据结构和业务需求等因素进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值