2009-04-01 10 views
1

Entlang der gleichen Ader wie die Fragen, die gestern gestellt wurden, habe ich ein anderes "Zähle wenn" -Dilemma. Jetzt brauche ich eine Zählung der Bedingung Einträge zu ziehen, die die folgenden Parameter erfüllen:Count DIFFDATE Überschreiten eines bestimmten Wertes - Schritt 3

  1. ConditionLevelEntryID = 189
  2. CheckoffDate ist> 14 Tage von ConditionEntryDateTime
  3. CheckoffDate IS NULL und ConditionEntryDateTime> 14 Tage alt

Ich habe versucht, die Abfrage (unten), die nicht funktioniert. Der zurückgegebene Fehler liegt unter der Abfrage. Bitte helfen Sie mir, die Abfrage zu verfeinern, um eine genaue Anzahl zu erhalten. Danke im Voraus.

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) 

Server: Msg 170, Ebene 15, Status 1, Zeile 7 Zeile 7: falsche Syntax in der Nähe von ')'.

Antwort

2

Try this:

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

, oder noch besser:

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

Diese Abfrage wird einen zusammengesetzten Index auf (conditionlevelentryid, conditionentrydatetime) verwenden, wenn Sie eine haben, die meisten werden wahrscheinlich erheblich verbessern die Abfrageleistung

1

Ein wenig eingerostet, aber mit dem konvertierten conditionentrydatetime im IS NULL-Ausdruck wird nichts getan.

Wie wäre es?

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)) 
Verwandte Themen