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



我试图找到表格的平均年龄,但有些记录0000为年份。

我该如何解决这个问题,因为它会增加平均年龄?

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

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

过滤掉"古代"的出生日期:

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

尝试添加WHERE条件。

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

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

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

此外,如果您尝试按某个字段显示平均年龄,请不要忘记按该字段分组。

首先,为什么要将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-%';

取决于字符串的格式。

使用 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')

最新更新