暂无图片
分享
lscomeon
2019-09-16
请教个SQL查询问题

各位专家,请教一个mysql的数据库,表的数量级在8000W左右,不存在索引,怎么编写sql能高效查询出来结果呢?


表结构如下

int(id)    char(date)

1    2019/08/02

8    2019/08/19

2    2019/03/26

1    2018/01/09

3    2017/07/16

4    2018/01/25


如何按照年月查询每年月中的id数量,其中ID以最新时间为准


统计出结果如下

date      id_count

2019/08     2

2019/03     1

2018/01     1

2017/07     1




收藏
分享
4条回答
默认
最新
文成

设计问题应该从根本解决啊,如果分区,分表,加索引


实在无法更改就建立一张汇总表,定期汇总数据

暂无图片 评论
暂无图片 有用 0
Cui Hulong

1.sql语句方面这个语句只能走 group by ,char(date) 最好设置一下索引,

   定一个查询范围。DATE_FORMAT处理。

2.或则定义月中间表 把每月的数据数据保存下来。

3.感觉储存过程之类的效果也不是很好。





暂无图片 评论
暂无图片 有用 0
lastwinner

其实就是个两段查询拼起来就行了,没那么难。

--这个是按天查id_cnt

with t as (

   select id, max(date) max_d from t group by id)

select max_d, count(id) id_cnt from t group by max_d;


--这个是按月去查,假定日期一定是yyyy/mm/dd的格式

with t as (

   select id, max(date) max_d from t group by id)

select substr(max_d,1,7) max_m, count(id) id_cnt from t group by substr(max_d,1,7);

暂无图片 评论
暂无图片 有用 0
lscomeon
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏