业务场景是这样的:
前台提交数据到后台,后台做统计的时候,要根据每天去统计当天业务数量,想要的效果如下:
比如像查询最近30天内的数据,数据形式是这样的:
天:数目
01:32
02:23
03:0(如果当天没有业务,则为0)
...
30:32
现在问题是,如果当天没有业务产生,那么当天的日期是肯定没有的。如何通过sql查询出来一个如上
例子中的那样,如果当天没有业务,则自动将当天的业务置为0,这个用sql如何实现?在代码层很容易
实现问题是如何通过sql一次查询出来一个完整的结果
业务场景是这样的:
前台提交数据到后台,后台做统计的时候,要根据每天去统计当天业务数量,想要的效果如下:
比如像查询最近30天内的数据,数据形式是这样的:
天:数目
01:32
02:23
03:0(如果当天没有业务,则为0)
...
30:32
现在问题是,如果当天没有业务产生,那么当天的日期是肯定没有的。如何通过sql查询出来一个如上
例子中的那样,如果当天没有业务,则自动将当天的业务置为0,这个用sql如何实现?在代码层很容易
实现问题是如何通过sql一次查询出来一个完整的结果
我在好几个类似问题里面给过这种构造连续日期的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'
类似这样。
15 回答8.4k 阅读
7 回答5.3k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
建议从代码层面去解决。我之前和你有过同样的需求,后来还是放弃了。毕竟数据库不太适合做逻辑层面上的事情。
大可不必非要追求一条SQL解决问题。
可能对你的问题,没有什么实质性帮助。一点点经验之谈