平均年龄但不包括某些记录

问题描述 投票:0回答:4

我试图找到一张桌子的平均年龄,但有些记录有0000作为年份。

如何提高平均年龄?

这就是我目前所拥有的,它返回112

Select
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
sql function date average datediff
4个回答
0
投票

过滤掉“古老”的出生日期:

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

0
投票

尝试添加WHERE条件。

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

您也可以尝试通过引入dob_yyyy来限制CASE WHEN不为零。

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

此外,如果您试图通过某个字段显示平均年龄,请不要忘记GROUP BY该字段。


0
投票

首先,为什么要将dob_yyyy转换为整数。你应该使用日期,而不是整数。

如果您将dob_yyyy存储为字符串,那么您应该修复您的应用程序,以便将其存储为日期。但是,假设你正在做的事情,我认为你想要:

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

要么:

where dob_yyyy not like '0000-%';

取决于字符串的格式。


0
投票

使用WHERE子句跳过出生年份值的无效和NULL日期。

Select
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
WHERE (dob_yyyy IS NOT NULL) AND (dob_yyyy > '1900')
© www.soinside.com 2019 - 2024. All rights reserved.