请大牛帮我看看这个SQL如何实现!

业务场景是这样的:

前台提交数据到后台,后台做统计的时候,要根据每天去统计当天业务数量,想要的效果如下:
比如像查询最近30天内的数据,数据形式是这样的:
天:数目
01:32
02:23
03:0(如果当天没有业务,则为0)
...
30:32
现在问题是,如果当天没有业务产生,那么当天的日期是肯定没有的。如何通过sql查询出来一个如上
例子中的那样,如果当天没有业务,则自动将当天的业务置为0,这个用sql如何实现?在代码层很容易
实现问题是如何通过sql一次查询出来一个完整的结果
阅读 3.2k
5 个回答

建议从代码层面去解决。我之前和你有过同样的需求,后来还是放弃了。毕竟数据库不太适合做逻辑层面上的事情。
大可不必非要追求一条SQL解决问题。

可能对你的问题,没有什么实质性帮助。一点点经验之谈

按日期中的天分组,用sum聚合。但是你这个当天的日期没有有点膈应啊

我在好几个类似问题里面给过这种构造连续日期的sql了,找一个30条以上记录的表,这里是tt:

select @rn:=case when @rn<9 then concat('0',@rn+1) else @rn+1 end rn 
from tt,(select @rn:=0) a limit 30;

剩下的就是你自己去join,group by,sum/count去吧

可以用一个完整的日期表去left join你的业务量表。比如先创建好一个包含最近一年日期的calendar(date)

select calendar.date, isnull(work.items, 0)
from calendar left join work on calendar.date = work.date
where calendar.date > date '2017-08-10'

类似这样。

新手上路,请多包涵

1楼正解,前段时间也有这么一个需求,sql语句中尽量少用函数,不是真的“没有什么不是一条sql语句不能解决的,有就两条”;也算是对数据库优化的一种形式吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题