只是想知道是否有更好更有效的方法来创建此查询,因为下面需要很长时间才能为数据库目录中的每个表运行此查询。谢谢
Select N'MSCRM_REPORTING' As [Database], N'dbo' As [Schema], N'apuk_erqanswerBase' As [Table], N'ModifiedOn' As ChangeType,
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) -7 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) THEN 1 ELSE 0 END) [0-7 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-28 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)- 8 THEN 1 ELSE 0 END) [8-28 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-84 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-29 THEN 1 ELSE 0 END) [29-84 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-182 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-85 THEN 1 ELSE 0 END) [85-182 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0, ModifiedOn), 0) BETWEEN convert(datetime,0) and DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) - 183 THEN 1 ELSE 0 END) [183+],
sum(case when ModifiedOn is null then 1 else 0 end) [NullRows],
count(*) as [RowCount]
From MSCRM_REPORTING.dbo.apuk_erqanswerBase
答案 0 :(得分:3)
拥有多个DATEDIFF会很昂贵,所以为什么不尝试在子查询中获取日期之间的差异并在SELECT中使用它:
Select N'MSCRM_REPORTING' As [Database], N'dbo' As [Schema], N'apuk_erqanswerBase' As [Table], N'ModifiedOn' As ChangeType,
sum(case when a.Days BETWEEN 0 AND 7 THEN 1 ELSE 0 END) [0-7 Days],
sum(case when a.Days BETWEEN 8 AND 28 THEN 1 ELSE 0 END) [8-28 Days],
sum(case when a.Days BETWEEN 29 AND 84 THEN 1 ELSE 0 END) [29-84 Days],
sum(case when a.Days BETWEEN 85 AND 182 THEN 1 ELSE 0 END) [85-182 Days],
sum(case when a.Days >= 183 THEN 1 ELSE 0 END) [183+],
sum(case when ModifiedOn is null then 1 else 0 end) [NullRows],
count(*) as [RowCount]
From
(
Select DATEDIFF(dd, ModifiedOn, getdate()) AS [Days],
ModifiedOn
From MSCRM_REPORTING.dbo.apuk_erqanswerBase
) a
答案 1 :(得分:0)
你也可以试试这个:
Select N'MSCRM_REPORTING' As [Database],
N'dbo' As [Schema],
N'apuk_erqanswerBase' As [Table],
N'ModifiedOn' As ChangeType,
sum(case when DATEDIFF(dd, ModifiedOn, getdate()) BETWEEN 0 AND 7 THEN 1 ELSE 0 END) [0-7 Days],
sum(case when DATEDIFF(dd, ModifiedOn, getdate()) BETWEEN 8 AND 28 THEN 1 ELSE 0 END) [8-28 Days],
sum(case when DATEDIFF(dd, ModifiedOn, getdate()) BETWEEN 29 AND 84 THEN 1 ELSE 0 END) [29-84 Days],
---------------------
from MSCRM_REPORTING.dbo.apuk_erqanswerBase