start
开始原因:前端需要反馈一段时间内的日期数据,但是数据库并不是每天都有,就出现日期天数不连续的情况,然而,有需要所有的天数为基准来反馈,就有了以下sql,为大家参考。
思路:
1.获取一段日期内所有连续日期
2.以该日期为基准,右连接你的实际数据表,拼接成完整的数据
注意:
该方法第一天获取不到,需要自己注意,传参时,第一天需要向前一天
返回所有天数sql,其中tablename随便即可,列名称可以自己定
SELECT DISTINCT
date_format(
DATE_ADD(
'2018-08-20',
INTERVAL id DAY
),
'%Y-%m-%d'
) AS `TIME`
FROM
tablename
WHERE
DATE_ADD(
'2018-08-20',
INTERVAL id DAY
) <= '2018-08-26'
ORDER BY time
执行结果:

实际逻辑sql
SELECT dis,m.date,ifnull(workhour,0) as workhour FROM (
SELECT DISTINCT DATE_FORMAT(DATE_ADD(
'2020-02-20', INTERVAL id DAY
),
'%Y-%m-%d'
) AS date
FROM
dis_work_daily_use
WHERE DATE_ADD(
'2020-02-20', INTERVAL id DAY
) <= '2020-03-05'
ORDER BY date
) m
LEFT JOIN
(SELECT dis, DATE,workhour FROM dis_work_daily_use
WHERE dis = '1917154001' and date BETWEEN '2020-02-20' AND '2020-03-05') n ON m.date=n.date
网友评论