根据多个字段计算年龄
Calculate age based on multiple fields
我有一个 table,其中包含出生日期列、死亡日期列和数据集提取日期。
我想用一个新的 'Age' 列来计算每个人的年龄,可以是他们的死亡日期,也可以是他们在提取日期的年龄——而不是当前日期。我现在不太明白。
示例数据:
当前table
person_id
birth_datetimetime
death_datetime
extract_date
1234
1980-04-01T00:00:00
null
2021-12-31
8765
1925-05-04T00:00:00
2018-05-T00:00:00
2021-12-31
9102
1974-05-17T00:00:00
2021-01-31T00:00:00
2021-12-31
5678
2019-09-01T00:00:00
null
2021-12-31
3456
1947-04-01T00:00:00
2016-06-14T00:00:00
2021-12-31
期望输出
person_id
birth_datetimetime
death_datetime
extract_date
Age
1234
1980-04-01T00:00:00
null
2021-12-31
41
8765
1925-05-04T00:00:00
2018-05-T00:00:00
2021-12-31
93
9102
1974-05-17T00:00:00
2021-01-31T00:00:00
2021-12-31
47
5678
2019-09-01T00:00:00
null
2021-12-31
2
3456
1947-04-01T00:00:00
2016-06-14T00:00:00
2021-12-31
69
考虑以下方法
select *,
date_diff(ifnull(death_datetime, extract_date), date(birth_datetimetime), year) as age
from your_table
如果应用于您问题中的示例数据 - 输出为
我有一个 table,其中包含出生日期列、死亡日期列和数据集提取日期。
我想用一个新的 'Age' 列来计算每个人的年龄,可以是他们的死亡日期,也可以是他们在提取日期的年龄——而不是当前日期。我现在不太明白。
示例数据:
当前table
person_id | birth_datetimetime | death_datetime | extract_date |
---|---|---|---|
1234 | 1980-04-01T00:00:00 | null | 2021-12-31 |
8765 | 1925-05-04T00:00:00 | 2018-05-T00:00:00 | 2021-12-31 |
9102 | 1974-05-17T00:00:00 | 2021-01-31T00:00:00 | 2021-12-31 |
5678 | 2019-09-01T00:00:00 | null | 2021-12-31 |
3456 | 1947-04-01T00:00:00 | 2016-06-14T00:00:00 | 2021-12-31 |
期望输出
person_id | birth_datetimetime | death_datetime | extract_date | Age |
---|---|---|---|---|
1234 | 1980-04-01T00:00:00 | null | 2021-12-31 | 41 |
8765 | 1925-05-04T00:00:00 | 2018-05-T00:00:00 | 2021-12-31 | 93 |
9102 | 1974-05-17T00:00:00 | 2021-01-31T00:00:00 | 2021-12-31 | 47 |
5678 | 2019-09-01T00:00:00 | null | 2021-12-31 | 2 |
3456 | 1947-04-01T00:00:00 | 2016-06-14T00:00:00 | 2021-12-31 | 69 |
考虑以下方法
select *,
date_diff(ifnull(death_datetime, extract_date), date(birth_datetimetime), year) as age
from your_table
如果应用于您问题中的示例数据 - 输出为