之前为这个问题困扰了半天,搁网上找了半天解决方案,基本上都是单独建一张日期表进行联查。但我感觉很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