2011-04-14 66 views
1

我昨天發現了一個問題,無論是我的表格設計還是我從中提取數據的查詢,我都需要一些關於如何處理和解決問題的指導/建議。TSQL確定正確的日期

我的表如下:

CREATE TABLE 
[DT].[CountTotals](
    [Acct] [varchar](8) NOT NULL, 
    [TCount] [smallint] NOT NULL , 
    [TDate] [smalldatetime] NOT NULL, 
    [PostDate] [smalldatetime] NOT NULL , 
    [DayCount] [tinyint] NULL , 
    [AggCount] [smallint] NULL , 
    [AggNumber] [numeric](10, 0) NULL, 
    [IsReadyToArchive] [bit] NOT NULL 
) 

我用下面的視圖拉這樣的數據:

CREATE VIEW [DT].[vwGetCountHistory] 
AS 

    SELECT  
     C.Acct, C.TCount, C.TDate, C.PostDate 
     , C.DayCount, C.AggCount, C.AggNumber 
    FROM DT.CountTotals C 

    UNION 

    SELECT  
     AC.Acct, AC.TCount, AC.TDate, AC.PostDate 
     , AC.DayCount, AC.AggCount, AC.AggNumber 
    FROM ARCHIVE.DTA.CountTotals AC 

所有這一切工作正常。該表每天約有300k條記錄總記錄,其中包括約5000條新記錄,PostDate是記錄添加的日期。我的問題來自DayCount字段 - 該字段每天在桌面上增加1,直到PostDate is < GetDate()-90。我的問題是在下面的查詢:

SELECT  
     Acct 
     , SUM(AggCount) AS SumofAggCount 

    FROM DT.vwGetCountHistory 
    WHERE (DayCount <= 5) 
     AND 
     (
      PostDate >= @BusinessDate - 90 
      AND PostDate <= @BusinessDate 
     ) 
    GROUP BY Acct 
    HAVING (SUM(AggCount) >= 4) 

該查詢奇妙的作品,如果我正在尋找當前的日期,因爲DAYCOUNT是正確的。但是愚蠢的我忘記了他們可以搜索前幾天的數據,所以我的DayCount自PostDate以來每天都會增加。

我在尋找有關如何解決此問題的建議。有沒有辦法確定正確的日期?

+0

你有一些增加DayCount的過程? – n8wrl 2011-04-14 11:25:26

+0

是的,我有一個運行存儲過程執行更新的早晨工作。 – Taryn 2011-04-14 11:28:35

回答

1

而不是存儲&管理DayCount,您可以計算查詢中@BusinessDate和PostDate之間的天數嗎?

+0

這是一個想法,但業務堅持存儲和維護DayCount。但是,如果我不能找出另一種解決方案,我可能不得不將它提供給他們。 – Taryn 2011-04-14 11:31:23

+0

感謝您的反饋意見。我將根據您的建議手動計算DayCount。我其實並沒有想到這一點 – Taryn 2011-04-14 18:54:46

0

我通常認同@n8wrl,DayCount應該很可能不會被存儲並且應該在飛行中計算,但是如果這不是一個選項,那麼至少使它成爲一個計算列,它是一個DATEDIFF PostDate和GETDATE()並且擺脫那夜間過程。當然,這實際上仍然是實時處理它,但我認爲,由於夜間作業沒有運行或運行兩次的潛在風險等因素,性能不會受到影響。

Now ,爲眼前的需要,可你只是使DAYCOUNT測試更有活力,如:

WHERE (DayCount <= (5 + DATEDIFF(DAY, @BusinessDate, PostDate))) 

這樣做,我們加1的條件,使這將是DAYCOUNT < = 6作爲昨天的排位賽記錄現在有一個DayCount爲6.