我想在我的销售表中获取上个月和当月之间的数据。我使用dateadd
函数获得月份。但查询需要很长时间才能返回结果。当我删除where子句中的日期范围时,执行时间非常快。如何在查询中将月份的日期范围添加到快速执行时间?
这是我的查询。
select *
from sales S
where S.DOCUMENT_DATE >= DATEADD(m, DATEDIFF(m, 0, GETDATE())-1 , 0) and
S.DOCUMENT_DATE <= DATEADD(m, DATEDIFF(m, 0, GETDATE())+1 , -1)
答案 0 :(得分:0)
根据您的查询,您需要sales(document_date)
上的索引。
答案 1 :(得分:0)
您可以创建非聚集索引。
CREATE NONCLUSTERED INDEX NC_IX_Sales_DOCUMENT_DATE ON Sales (DOCUMENT_DATE)
然后你可以运行你的查询。
SELECT *
FROM Sales s
WHERE s.DOCUMENT_DATE >= DATEADD(mm,DATEDIFF(mm,0,DATEADD(mm,-1,GETDATE())),0)
AND s.DOCUMENT_DATE <= DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1, 0))
此外,您可以考虑当前月份尚未结束。
SELECT *
FROM Sales s
WHERE s.DOCUMENT_DATE >= DATEADD(month,DATEDIFF(month,0,DATEADD(month,-1,GETDATE())),0)
AND s.DOCUMENT_DATE <= GETDATE()