Mysql按日期查询一周内数据,如果没有那个日期的记录则查询出来为0 5C

做报表的。
一个订单表有 创建时间字段,eg:2017-6-29
如果 30号没有订单,就没有 2017-6-30
想要实现 查出来 2017-6-30,当天的记录全为0
问题是 只能查出来已有的 记录日期,怎么解决?图片说明

7个回答

你需要把所有要显示的时间当成一张虚拟表,然后left join 你的订单表就ok了

不行啊
图片说明
图片说明

SELECT
l.date,
IFNULL(t.count, 0) count
FROM
(
SELECT
DATE_FORMAT(
ADDDATE('2016-06-01', INTERVAL @d DAY),
'%Y-%m-%d'
) AS date ,@d :=@d + 1 DAY
FROM
orders,
(SELECT @d := 0) temp
WHERE
ADDDATE('2016-06-01', INTERVAL @d DAY) <= DATE_FORMAT('2016-06-30', '%Y-%m-%d')
ORDER BY
DAY
) l
LEFT JOIN (
SELECT
DATE_FORMAT(o.create_time, '%Y-%m-%d') DAY,
count(o.id)
FROM
orders o
WHERE
DATE_FORMAT(o.create_time, '%Y-%m-%d') IN (
'2017-06-27',
'2017-06-28',
'2017-06-29',
'2017-06-30'
)
GROUP BY
DATE_FORMAT(create_time, '%Y-%m-%d')
) t ON l.date = t.DAY

参考:http://blog.csdn.net/fu_fei_wen/article/details/76186627

其实这样就可以,我们只需要在代码里面去匹配着这个时间

![图片说明](https://img-ask.csdn.net/upload/201707/31/1501487611_131891.jpg)图片说明

qq_21535287
LuckyChend 效率低的太垃圾了。没有这样做的。
接近 3 年之前 回复
 public static List getChangeData(List xdata, List<EhcartData> data) {
        List result = new ArrayList();
        Double num  =null;
        for (int i = 0; i < xdata.size(); i++) {
              num  =  isHave( data, xdata.get(i).toString());
              if(num!=null){
                  result.add(num);
              }else{
                  result.add(0);
              }
        }
        return result;
    }
    public static Double isHave(List<EhcartData> data, String xValue) {
        EhcartData dataResult = null;
        Double num =null;
        for (int j = 0; j < data.size(); j++) {
            dataResult = data.get(j);
            if (dataResult.getXvalue().equals(xValue)) {
                num =dataResult.getNum();
                break;
            }
        }
        return num;
    }
weixin_42267457
weixin_42267457 回复LuckyChend: 那要怎么做
一年多之前 回复
qq_21535287
LuckyChend 不要误导其他人。
接近 3 年之前 回复
qq_21535287
LuckyChend 效率低的太垃圾了。没有这样做的。
接近 3 年之前 回复

效率低的太垃圾了。没有这样做的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐