2012-11-20 139 views
1

我正在针对我们的个人客户运行一些针对我们的事件记录数据库的查询。我想要返回的是2012年的所有月份名称以及已发生多少次公开事件的计数。对于一直在我们这里工作了12个月以上的客户,但对于一直在我们这里工作了很短时间的客户来说,这样的工作很好。MySQL填充空日期值

查询我是这样的:

SELECT DATE_FORMAT(FROM_UNIXTIME(createdtime/1000), '%Y') as 'Year', 
    DATE_FORMAT(FROM_UNIXTIME(createdtime/1000), '%M') as 'Month', 
    count(wo.workorderid) as 'Total Logged' 
    FROM workorder_threaded wot 
    inner join workorder wo 
    on wo.workorderid = wot.workorderid 
    and wo.siteid = 4806 
    and DATE_FORMAT(FROM_UNIXTIME(createdtime/1000), '%Y') <> '2011' 
    where wot.workorderid = wot.thd_woid 
    GROUP BY DATE_FORMAT(FROM_UNIXTIME(createdtime/1000), '%Y%m') 

输出我得到的是这样的:

Year Month  Total Logged 
    2012 August  3 
    2012 September 356 
    2012 October  212 
    2012 November 120 

我需要但以下几点:

Year  Month  Total Logged 
    2012  January  0 
    2012  February 0 
    2012  March  0 
    2012  April  0 
    2012  May   0 
    2012  June  0 
    2012  July  0 
    2012  August  3 
    2012  September 356 
    2012  October  212 
    2012  November 120 
    2012  December 0 

它不具有按年限制,即通话记录DB在2011年有此数据,因此可以修改查询以过滤年份范围。

我知道这不是填充,因为数据不存在,我已经看到了创建一个数字\日期表的方法,并引用这个来填充日期,但我正在努力做到这一点。我也改变了周围的联接和条件无济于事。

在此先感谢。

回答

1

您需要使用LEFT JOIN这里

+0

如果我用左加入我得到下面的输出: – Greg

+0

年月总已记录 空空0 2012年8月3 2012年9月356 2012年10月212 2012年11月120 – Greg

+0

是的,这些空值对应于您需要从另一个表中生成或“JOIN”所需的年份和月份。我**不会**给你写你的查询,你将不得不自己处理它。 BTW:您可以使用标准SQL日期函数从日期中获取Year和Month,事实上,您应该在输出中使用生成的Year和Month,因为即使您的现有用户在某些月份可能没有任何活动。和实际日期/年比较好 - 即''和YEAR ='2012''而不是'和YEAR <>'2011'' –