2017-12-27 6 views
0

Ich versuche, das Durchschnittsalter einer Tabelle zu finden, aber einige der Datensätze haben 0000 als das Jahr.Durchschnittsalter, aber ohne bestimmte Datensätze

Wie komme ich dazu, wie es das Durchschnittsalter erhöht?

Das ist, was ich habe zur Zeit und es gibt 112

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
+1

Verwenden Sie einfach die Where-Klausel, um die 0000 Jahre herauszufiltern. – Bob

+0

Nur als Nebensache ... Sind Sie sicher, dass Sie 'datediff()' verwenden möchten, um das Alter zu berechnen? Es ist Integer Mathe, was bedeutet, dass, wenn mein 50. Geburtstag morgen ist, "datediff" mir genau 49 Jahre alt zeigt. – Joe

+0

Können Sie Beispiele für die 'dob_yyyy'-Werte angeben? –

Antwort

0

filtern "alte" Geburtsdatum:

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm.master_efields 
where dob_yyyy != '0000' 
0

Versuchen Sie, eine WHERE Bedingung hinzugefügt wird.

Select AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
WHERE dob_yyyy <> '0000' 

können Sie auch versuchen, die dob_yyyy Einschränkung nicht Null zu sein, indem eine CASE WHEN einzuführen.

Select AVG(CASE WHEN dob_yyyy <> '0000' THEN Datediff("yyyy",cast(dob_yyyy as int),getdate())) from ppm..master_efields 

Außerdem, wenn Sie durch ein Feld, um das Durchschnittsalter zu zeigen versuchen, vergessen Sie nicht nach diesem Feld GRUPPE.

0

Erstens, warum werfen Sie dob_yyyy auf eine ganze Zahl. Sie sollten Daten verwenden, keine Ganzzahlen.

Wenn Sie dob_yyyy als Zeichenfolge speichern, sollten Sie Ihre Anwendung so reparieren, dass sie als Datum gespeichert wird. Aber unter der Annahme, dass das, was Sie tun, ich glaube, Sie wollen:

Select AVG(Datediff(year, cast(dob_yyyy as date), getdate())) 
from ppm..master_efields 
where dob_yyyy not like '%-0000'; 

oder:

where dob_yyyy not like '0000-%'; 

je nach Format der Zeichenfolge.

0

Verwenden Sie eine WHERE-Klausel, um ungültige und NULL-Datum von Geburtsjahrwerten zu überspringen.

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
WHERE (dob_yyyy IS NOT NULL) AND (dob_yyyy > '1900') 
Verwandte Themen