【问题标题】:(SQL) find oldest person in table (avoid hard code)(SQL) 查找表中最老的人(避免硬编码)
【发布时间】:2021-11-08 04:40:16
【问题描述】:

我正在寻找我餐桌上年龄最大的人。我有所有人的生日。

我这样写代码:

SELECT TIMESTAMPDIFF(day, birthdate, '2021-09-12') AS 'Age'
FROM table
ORDER BY age
limit 1

但我认为这是硬编码。如何改进我的代码?

【问题讨论】:

    标签: mysql sql hardcode


    【解决方案1】:

    您还应该将固定日期更改为 curdate(),它会自动选择实际日期

    SELECT TIMESTAMPDIFF(day, birthdate, CURDATE()) AS 'Age'
    FROM table1
    ORDER BY birthdate DESC
    limit 1
    

    【讨论】:

      【解决方案2】:

      正如其他人所说,无需为此目的计算年龄。但是,如果您想继续使用以天为单位计算人年龄的解决方案,您可以部署以下解决方案:

      SELECT TIMESTAMPDIFF(day, birthdate, CURRENT_TIMESTAMP) AS 'Age' 
      FROM table ORDER BY age DESC limit 1
      

      【讨论】:

      • 谢谢!!!请问如果我计算年龄,我的代码是硬代码吗?
      • 没有。当我们将某些值称为“硬编码”时,我们的意思是说提供特定值(例如您的示例中的今天日期)会降低代码的灵活性。这个新的解决方案不是硬编码的,因为CURRENT_TIMESTAMP 会适应当前的时间戳。
      【解决方案3】:

      最年长的人将是最小出生日期的人。您根本不需要TIMESTAMPDIFF,您只需通过birthdate asc 订购并接受limit 1

      【讨论】:

      • 你要升序而不是降序,否则你会得到最年轻的。
      【解决方案4】:

      您不需要timestampdiff - 只需按birthdate 排序查询并取最小(最早)的一个:

      SELECT   *
      FROM     mytable
      ORDER BY birthdate ASC
      LIMIT    1
      

      【讨论】:

      • 谢谢!!我也可以用来编码'MIN(DATE)'吗?
      • @island1996 您不需要在那里拨打min - 只需查询birthdate - 因为您要订购并取第一行,它将是最小的。
      猜你喜欢
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2011-01-07
      • 1970-01-01
      • 2022-10-31
      相关资源
      最近更新 更多