朋友接了个需求:
一张表 有 date num 两个字段 数据量挺大, date字段不是连续的(比如2010-01-01,2010-01-03)然后需要按照date 分组,2010-01-02 没有的话查出的结果也要有它 只是对应num 要是零
A:date_table 2020-01-01 2020-01-02 2020-01-03
select t.date, sum( ifnull(t1.num,0))
from date_table t
left join ni_table t1 on date_format(date,’%Y-%M-%d’) = t.date
group by t.date
你建一个日期表,以日期为主表,进行查询。
oracle中,查询每天日期的sql
select date'2017-04-25' + (rownum - 1) dt from dual connect by rownum <= (date'2017-05-05' - date'2017-04-25' + 1)
mysql中,查询每天日期的sql
SELECT @cdate := DATE_ADD(@cdate,INTERVAL - 1 DAY) `date`
FROM (SELECT @cdate :=DATE_ADD('2020-06-29', INTERVAL + 1 DAY) FROM t_request_transfer_total) t1
WHERE @cdate > '2020-06-01'
如果其实日期终止日期不确定,可以使用明细表的max min 日期做条件