Создайте запрос, который показывает только активные записи, основанные на дате начала, продолжительности и true / false - PullRequest
1 голос
/ 13 мая 2010

Я пытаюсь собрать динамическое представление, которое выдаст список всех писем, которые все еще отклоняются.

Структура таблицы:

  • EmailName - varchar (150) - адрес электронной почты
  • StartRejection - Date - День начала отклонения электронной почты
  • Duration - Small Int - Продолжительность отклонения в днях
  • IsIndefinate - Bit - Отклонение «не относится к конкретному диапазону дат», но неопределенно

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

Думаю, вам нужна функция t-sql DATEADD.

Так что запрос, который вам нужен, может выглядеть следующим образом:

SELECT  [EmailName]
FROM    [YourTable]
WHERE   [IsIndefinate] = 1 OR
        @date BETWEEN [StartRejection] AND DATEADD(day, [StartRejection], [Duration])

где @date это ваш [StartDate] параметр. Этот запрос возвращает электронные письма, которые IsIndefinate или между [StartRejection] и [StartRejection] + [Duration] датами (исправьте мое предположение, если я неправильно понимаю ваш вопрос).

0 голосов
/ 13 мая 2010

Попробуйте это. Обратите внимание, что я использовал smalldatetime для StartRejection, поскольку некоторые читатели могут не работать с SQL 2008 +.

DECLARE @EmailRejection TABLE (EmailName varchar(150), StartRejection smalldatetime, Duration smallint, IsIndefinate bit)
DECLARE @Today smalldatetime, @Duration smallint
SET @Today = CONVERT(smalldatetime, CONVERT(varchar, GETDATE(),112))
SET @Duration = 5

INSERT INTO @EmailRejection(EmailName, StartRejection, Duration, IsIndefinate) VALUES('user1@domain.com', @Today-3, @Duration, 0)
INSERT INTO @EmailRejection(EmailName, StartRejection, Duration, IsIndefinate) VALUES('user2@domain.com', @Today-4, @Duration, 0)
INSERT INTO @EmailRejection(EmailName, StartRejection, Duration, IsIndefinate) VALUES('user3@domain.com', @Today-5, @Duration, 0)
INSERT INTO @EmailRejection(EmailName, StartRejection, Duration, IsIndefinate) VALUES('user4@domain.com', @Today-6, @Duration, 0)
INSERT INTO @EmailRejection(EmailName, StartRejection, Duration, IsIndefinate) VALUES('user4@domain.com', @Today-10, @Duration, 1)

SELECT * FROM @EmailRejection
WHERE (IsIndefinate = 1) OR (IsIndefinate = 0 AND StartRejection > DATEADD(dd, 0-Duration, GETDATE()))

IsIndefinate (sic должен быть IsIndefinite)
/ Spellingpolice

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...