你如何在postgres中显示每个类别的最大日期

How do you display the max date per category with conditions in postgres

如果我有一个像这样的 table(我们称它为 t_info):

surname date_of_birth blue_eyes blonde_hair right_handed
Smith 2013-06-13 True True True
Smith 2014-08-20 True False True
Brown 2012-07-27 True True False
Brown 2013-01-30 True False True
Brown 2014-12-15 True True False
Hughes 2014-07-08 True True False

我非常想要一种方法来了解具有特定条件的每个姓氏的最大出生日期。 如果我可以 return 这个就好了:

surname blue_eyes blonde_hair right_handed
Smith 2014-08-20 2013-06-13 2014-08-20
Brown 2014-12-15 2014-12-15 2013-01-30
Hughes 2014-07-08 2014-07-08 Null

我绝对可以通过执行以下操作来分别获得每样东西:

select surname, max(date_of_birth) as blue_eyes
from t_info
where blue_eyes
group by surname;

我可以将每一列作为子查询执行此操作,然后在姓氏上将它们连接在一起,但似乎必须有更好的方法使用某种 window 函数或类似函数,我就是做不到想想它是如何工作的。 如果联合子查询是正确的方法,那就这样吧。 请注意我的实际数据不是这个,但它在类别、日期和一些布尔字段方面具有相同的结构。

我使用的是 10.5 版的 postgres。

SELECT
  surname
, MAX(CASE WHEN blue_eyes THEN date_of_birth END) AS blue_eyes
, MAX(CASE WHEN blonde_hair THEN date_of_birth END) AS blonde_hair
, MAX(CASE WHEN right_handed THEN date_of_birth END) AS right_handed
FROM
  t_info
GROUP BY surname