【发布时间】:2021-11-08 04:40:16
【问题描述】:
我正在寻找我餐桌上年龄最大的人。我有所有人的生日。
我这样写代码:
SELECT TIMESTAMPDIFF(day, birthdate, '2021-09-12') AS 'Age'
FROM table
ORDER BY age
limit 1
但我认为这是硬编码。如何改进我的代码?
【问题讨论】:
我正在寻找我餐桌上年龄最大的人。我有所有人的生日。
我这样写代码:
SELECT TIMESTAMPDIFF(day, birthdate, '2021-09-12') AS 'Age'
FROM table
ORDER BY age
limit 1
但我认为这是硬编码。如何改进我的代码?
【问题讨论】:
您还应该将固定日期更改为 curdate(),它会自动选择实际日期
SELECT TIMESTAMPDIFF(day, birthdate, CURDATE()) AS 'Age'
FROM table1
ORDER BY birthdate DESC
limit 1
【讨论】:
正如其他人所说,无需为此目的计算年龄。但是,如果您想继续使用以天为单位计算人年龄的解决方案,您可以部署以下解决方案:
SELECT TIMESTAMPDIFF(day, birthdate, CURRENT_TIMESTAMP) AS 'Age'
FROM table ORDER BY age DESC limit 1
【讨论】:
CURRENT_TIMESTAMP 会适应当前的时间戳。
最年长的人将是最小出生日期的人。您根本不需要TIMESTAMPDIFF,您只需通过birthdate asc 订购并接受limit 1。
【讨论】:
您不需要timestampdiff - 只需按birthdate 排序查询并取最小(最早)的一个:
SELECT *
FROM mytable
ORDER BY birthdate ASC
LIMIT 1
【讨论】:
min - 只需查询birthdate - 因为您要订购并取第一行,它将是最小的。