2016-12-19 3 views
0

より効率的な方法でこのクエリを作成するかどうかは、このクエリがデータベースカタログ。このクエリを効率的に作成する方法 - audit histroyを作成して変更しました。

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 

答えて

3

は、複数のDATEDIFFsを持つありがとうございことはコストがかかり、なぜサブクエリでの日付の差を取得し、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 
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 
関連する問題