Счет DIFFDATE, превышающий указанное значение - Шаг 3 - PullRequest
1 голос
/ 01 апреля 2009

В том же духе, что и вопросы, заданные вчера, у меня есть еще одна дилемма «считать, если». Теперь мне нужно получить количество записей условий, которые соответствуют следующим параметрам:

  1. ConditionLevelEntryID = 189
  2. CheckoffDate -> 14 дней от ConditionEntryDateTime
  3. CheckoffDate is NULL, а ConditionEntryDateTime -> 14 дней

Я попытался (ниже) запрос, который не работает. Возвращенная ошибка находится ниже запроса. Пожалуйста, помогите мне уточнить запрос, чтобы получить точный счет. Заранее спасибо.

select Count(*)
from conditionentrytable c
where conditionlevelentryid=189
    and 
    ((c.checkoffdate IS NULL 
    and 
    convert(varchar(12),DATEADD(day,14,c.conditionentrydatetime)))
    or 
    DATEDIFF(dd,c.checkoffdate,c.conditionentrydatetime)>14)

Сервер: Msg 170, уровень 15, состояние 1, Строка 7 Строка 7: неправильный синтаксис рядом ')'.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2009

Попробуйте это:

SELECT  COUNT(*)
FROM    conditionentrytable c
WHERE   conditionlevelentryid=189
        AND DATEDIFF(dd, COALESCE(c.checkoffdate, GETDATE()),c.conditionentrydatetime) > 14

или даже лучше:

SELECT  COUNT(*)
FROM    conditionentrytable c
WHERE   conditionlevelentryid=189
        AND c.conditionentrydatetime > COALESCE(c.checkoffdate, GETDATE()) - 14

Последний запрос будет использовать составной индекс для (conditionlevelentryid, conditionentrydatetime), если он у вас есть, что, скорее всего, значительно повысит производительность запроса.

1 голос
/ 01 апреля 2009

Я немного заржавел, но с преобразованным условным временем в выражении IS NULL ничего не происходит

Как насчет?

select Count(*)
from conditionentrytable c
where conditionlevelentryid=189
    and 
    ((c.checkoffdate IS NULL 
    and 
    DATEDIFF(dd,getdate(),c.conditionentrydatetime)>14)
    or 
    DATEDIFF(dd,c.checkoffdate,c.conditionentrydatetime)>14))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...