SQL查询返回nil表中没有的日期

我有一个表’my_table’。 它有以下数据:

ID --- Date 1 --- 01/30/2012 2 --- 01/30/2012 3 --- 05/30/2012 

我可以编写一个SQL查询来返回特定日期之间ID的计数,按月分组,如下所示:

 {"01/30/2012" => 2, "05/30/2012" => 1} 

如何在请求的日期之间得到一个值为’0’的所有缺失月份的结果,如下所示:

 {"01/30/2012" => 2, "02/30/2012" => 0, "03/30/2012" => 0, "04/30/2012" => 0, "05/30/2012" => 1} 

提前致谢。

我这样做的方法是拥有一个包含所有日期列表的静态表。 在你的情况下,每月30日(二月份怎么样?)。 让我们调用这个表REF_DATE。 它有一个包含日期的列DT。

假设my_table在每个月中仅包含0个或最多1个不同的日期(第30个),您需要做的是:

 select DT,count(ID) from REF_DT REF left outer join my_table MT on REF.DT=my_table.DATE group by REF.DT; 

我想出了一些通过铁轨的hackish方式

 class Month> 1 end end range = Month.new(2010,1,1)..Month.new(2013,1,1) # range of date to query months=Hash.new (range).each do |month| months.merge!({month.to_s => 0}) # get all months as per range requirement of project end db_months = MyTable.find_all_by_date(range).group_by{ |u| u.date.beginning_of_month }.map{|m,v| [m.to_s , v.size]} #get all records grouped by months all_months = months.merge(Hash[db_months]) # merge all missing months 

根据您的要求将范围替换为您想要的日期格式。