我有一个带有datetime列的数据库表,我只想计算每天有多少记录可以追溯到3个月。我目前正在使用此查询:
var minDate = DateTime.Now.AddMonths(-3); var stats = from t in TestStats where t.Date > minDate group t by EntityFunctions.TruncateTime(t.Date) into g orderby g.Key select new { date = g.Key, count = g.Count() };
工作正常,但问题是如果一天没有记录,那么那天根本就不在结果中。例如:
3/21/2008 = 5 3/22/2008 = 2 3/24/2008 = 7
在那个简短的例子中,我想制作3/23/2008 = 0
。在真实查询中,所有零都应显示在3个月前和今天之间。
答案 0 :(得分:1)
在SQL中构建缺少的数据并不简单。我建议在SQL中获取 的数据,然后将其加入到所有相关日期的内存列表中:
5.2
您还可以获取不在数据中的日期列表并将它们连接起来。
答案 1 :(得分:0)
我同意@D Stanley的回答,但是想要进一步考虑混合。你在用这些数据做什么?它是由调用者处理的吗?它是在UI中呈现的吗?它是通过网络传输的吗?
考虑数据的大小。为什么 需要 填补空白?例如,如果知道通过网络返回,我建议不要填补空白。您所做的只是增加数据大小。这必须序列化,转移,然后反序列化。
如果要将数据循环到UI中进行渲染,那么为什么需要这些差距呢?为什么不实现从最小日期到最大日期的循环(如D Stanley的连接),然后在没有找到值时设置默认值。
如果您通过网络转移并且仍然需要一个集合,请考虑在电线的另一侧应用D Stanley的分辨率。
需要考虑的事情......