【发布时间】:2017-11-23 21:06:26
【问题描述】:
我正在尝试编写一个 SQL 脚本,仅根据客户的出生日期按年龄类别(0 - 10、11 - 20、21 - 30... 111 - 120)对客户进行分组。我知道这将涉及 datediff ,因为我无法理解它。我的数据库的ER图如下,你可以在personal_details表中找到生日。非常感谢所有帮助!
【问题讨论】:
-
请在您目前尝试过的查询中添加所需的结果。
我正在尝试编写一个 SQL 脚本,仅根据客户的出生日期按年龄类别(0 - 10、11 - 20、21 - 30... 111 - 120)对客户进行分组。我知道这将涉及 datediff ,因为我无法理解它。我的数据库的ER图如下,你可以在personal_details表中找到生日。非常感谢所有帮助!
【问题讨论】:
最好的方法可能是用你的年龄类别制作一个表格并进行连接
SELECT *
FROM Personal_details p
INNER JOIN age_categories ac
ON TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN ac.age_min AND ac.age_max
另一种方法是使用CASE,但不如您可以更新以创建新年龄类别的真实表格那么清晰...(0-18;18-30;...)
对于 CASE 版本:
SELECT *,
CASE
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN 0 AND 10 THEN '0-10'
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN 11 AND 20 THEN '11-20'
-- ...
END AS age_categorie
FROM Personal_details p
【讨论】:
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) BETWEEN @start@ AND @end@ THEN '@libelle_categorie@' 但它按预期工作:sqlfiddle.com/#!9/906e82/2