Вчера я обнаружил проблему с дизайном таблицы или запросом, из которого я извлекаю данные, и мне нужны некоторые рекомендации / предложения о том, как действовать и исправить мою проблему.
Моя таблица выглядит следующим образом:
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
Все это работает отлично.Таблица содержит около 300 тысяч записей, включая около 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.
Я ищу предложения о том, как решить эту проблему.Есть ли способ определить правильное количество дней?