如果我有一個這樣的表(我們稱之為t_info):
| 姓 | 出生日期 | 藍眼睛 | 金頭發 | 右手 |
|---|---|---|---|---|
| 史密斯 | 2013-06-13 | 真的 | 真的 | 真的 |
| 史密斯 | 2014-08-20 | 真的 | 錯誤的 | 真的 |
| 棕色的 | 2012-07-27 | 真的 | 真的 | 錯誤的 |
| 棕色的 | 2013-01-30 | 真的 | 錯誤的 | 真的 |
| 棕色的 | 2014-12-15 | 真的 | 真的 | 錯誤的 |
| 休斯 | 2014-07-08 | 真的 | 真的 | 錯誤的 |
我很想知道在特定條件下每個姓氏的最大出生日期。如果我能退回這個,那就太好了:
| 姓 | 藍眼睛 | 金頭發 | 右手 |
|---|---|---|---|
| 史密斯 | 2014-08-20 | 2013-06-13 | 2014-08-20 |
| 棕色的 | 2014-12-15 | 2014-12-15 | 2013-01-30 |
| 休斯 | 2014-07-08 | 2014-07-08 | 空值 |
我絕對可以通過執行以下操作來分別獲得每件事:
select surname, max(date_of_birth) as blue_eyes
from t_info
where blue_eyes
group by surname;
我可以將每一列作為子查詢執行此操作,然后在姓氏上將它們連接在一起,但似乎必須有使用某種視窗函式或類似函式的更好方法,我只是想不出它是如何作業的。如果加入的子查詢是正確的方法,那就這樣吧。請注意,我的實際資料不是這個,而是在類別、日期和一些布爾欄位方面具有相同的結構。
我使用的是 10.5 版的 postgres。
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313929.html
標籤:sql PostgreSQL 最大限度 每组最大 n
