填充空MySQL结果

时间:2014-03-21 01:01:14

标签: mysql group-by mysql5

我希望在销售时设置一个连续日期。

SELECT *,
   UNIX_TIMESTAMP(calendar.datefield) * 1000 AS time,
   IFNULL(Sum(mos + mosnk), 0)               AS mosfinal,
   IFNULL(Sum(neukunden), 0)                 AS neukunden
FROM   sms_stats
   RIGHT JOIN calendar
           ON ( DATE(sms_stats.date) = calendar.datefield )
WHERE  calendar.datefield BETWEEN Curdate() - INTERVAL 90 day AND Now()
GROUP  BY Date_format(calendar.datefield, '%Y%m%d') 

这会返回给我一个过去90天的列表。现在我想过滤它,但如果我做了

WHERE owner = 2 AND calendar.datefield BETWEEN Curdate() - INTERVAL 90 day AND Now()

它只返回一个结果,而不是日期列表。

1 个答案:

答案 0 :(得分:0)

where子句中的条件“取消”right outer join。解决方案是将条件移动到where子句。我优先选择left outer join而不是right outer join,所以我会交换表格:

SELECT *,
       UNIX_TIMESTAMP(c.datefield) * 1000        AS time,
       IFNULL(Sum(mos + mosnk), 0)               AS mosfinal,
       IFNULL(Sum(neukunden), 0)                 AS neukunden
FROM calendar c LEFT JOIN
     sms_stats ss
     ON DATE(ss.date) = c.datefield  and
        ss.owner = 2
WHERE c.datefield BETWEEN Curdate() - INTERVAL 90 day AND Now()
GROUP BY Date_format(c.datefield, '%Y%m%d') ;

我在表别名中添加了以使查询更具可读性。