2016-11-03 2 views
0

Ich frage mich nur, ob ich zwei Felder in einer Tabelle mit dem Namen "Änderungsdatum" und "Erstelldatum" habe, sie haben entweder ein Datum oder sind null. Was ich möchte wissen, ist der beste Weg, um die Anzahl der Vorkommen und gruppieren sie in einen bestimmten Bereich wie zum Beispiel 0-7 Tage, 8-14 Tage zu zählen, 15- 30 Tage usw.Der beste Weg, um das Datum in einem Bereich zu gruppieren

Ich dachte an Verwenden

sum(case when modifieddate between getdate()-7 and getdate() then 1 else 0 end) 

Ist dies der beste Weg, es zu tun oder gibt es einen besseren Weg für jeden der oben genannten Datumsbereich. Das Gleiche gilt für das Erstellungsdatum gehen würde

+0

Wenn die Bereiche nicht einheitlich sind, dann könnten Sie tun so etwas wie die folgenden um eine Liste von Bereichen zu erzeugen: 'SELECT CAST (DATUMADD (DAY, -R.startR, GETDATE()) ASDATE) startD, CAST (DATUMADD (DAY, -R.endR, GETDATE()) AS DATE) endD FROM (VALUES (0, 7), (8, 14), (15, 30)) R (startR, endR) 'schließe dich dann der ursprünglichen Abfrage an. HINWEIS: Bis hierhin gibt es eine Besetzung, die schwierig sein kann, wenn Ihr Änderungsdatum ein DATETIME und kein DATE ist. – ZLK

+0

Vielen Dank, es ist eigentlich Datetime, wie würde ich dieses Problem angehen – abs786123

+0

Bitte geben Sie Beispieldaten und das gewünschte Ergebnis – TJB

Antwort

0

Erstellen Sie eine Tabelle, die die Bereiche on the fly enthalten, greifen dann den Tisch und zählen:

select 
    mindays, 
    maxdays, 
    (
    select count(*) 
    from mytable t 
    where datediff(day, coalesce(t.modifieddate, t.createddate), getdate()) 
      between ranges.mindays and ranges.maxdays 
) as cnt 
from 
(
    select 0 as mindays, 7 as maxdays 
    union all 
    select 8 as mindays, 14 as maxdays 
    union all 
    select 15 as mindays, 30 as maxdays 
) ranges; 
Verwandte Themen