Sql 在计算每天的记录数时,如何包括没有记录的天数?
我有一个查询,告诉我每天创建了多少条记录,但是如果一天没有创建任何记录,那么查询不会列出日期和零金额 我如何包括这些日期Sql 在计算每天的记录数时,如何包括没有记录的天数?,sql,Sql,我有一个查询,告诉我每天创建了多少条记录,但是如果一天没有创建任何记录,那么查询不会列出日期和零金额 我如何包括这些日期 SELECT Convert(VARCHAR, CreatedDate, 101) as "Date", count(result_ID) as "Results" FROM Results WHERE CreatedDate >=dateadd(day,datediff(day,0,GetDate())- 90,0) AND Verified = 1 GROUP BY
SELECT Convert(VARCHAR, CreatedDate, 101) as "Date", count(result_ID) as "Results"
FROM Results
WHERE CreatedDate >=dateadd(day,datediff(day,0,GetDate())- 90,0)
AND Verified = 1
GROUP BY Convert(VARCHAR, CreatedDate, 101)
Order by "Date" desc
我有答案,但你们不会喜欢的。我最后要做的是为下一个十年或一百年的每一天预先填充一个日历表,并将外部联接从它保留到数据表中。这样,您每天都有一行,您可以在查询中为结果设置为空 这是一个解决方案,我们必须在我以前的公司做,似乎黑客了,但它确实工作,很容易排除故障。我们尝试创建动态数据集、非常聪明的SQL、联合多个数据集等的任何其他方法都会在以后遇到问题,并且感觉过于复杂。这个解决方案非常简单 下面是创建日历表的代码: 如果没有日历表,则可以使用递归查询
你必须保持一个日历表,可以容纳所有可能的日期。这取决于你的意思。如果你的数据不包括那些看起来可能不包括的日期,那么约格什所说的是真的。否则,您只需要放松查询,可能Verified=1限制会将这些日期推出。在不了解更多数据本身的情况下,这确实超出了合理答案的范围。您使用的是哪种?SQL只是一种查询语言,而不是特定数据库产品的名称。请为使用postgresql、oracle、sql server、db2、,……@ AyHORSESY。我使用SSMs176日历表是非常常见和有用的。我不认为它是一个黑客。谢谢。安得烈高兴地听到我们没有走错路线:我的团队只是觉得应该有一些命令在SQL或方式来做它。一旦我们有了桌子,我们就经常使用它!有,约格什在我完成回答之前就发布了,所以请注意:
with cte as (
select MIN(date) mndt, MAX(date) mxdt
from Results
union all
select DATEADD(DAY, 1, mndt) mndt, mxdt
from cte c
where mndt < mxdt
)
select c.mndt as date,
(select count(result_ID) from Results where date = c.mndt) as Results
from cte c;