一个宽表有姓名,性别,年龄,证件号码,找出每个性别中年龄最大的两个人,最后结果出现四条数据的SQL
时间: 2024-03-02 13:53:46 浏览: 65
可以使用窗口函数来实现这个需求,具体的 SQL 语句如下:
```
SELECT name, gender, age, id_number
FROM (
SELECT name, gender, age, id_number,
ROW_NUMBER() OVER (PARTITION BY gender ORDER BY age DESC) AS rn
FROM table_name
) AS t
WHERE rn <= 2
```
其中,`table_name` 指代宽表的表名,`name`、`gender`、`age`、`id_number` 分别指代姓名、性别、年龄、证件号码这四个字段。在子查询中,使用窗口函数 `ROW_NUMBER()` 来为每个性别的数据按照年龄降序排列,并为每个数据分配一个行号。然后在外部查询中,只选择行号不超过 2 的数据,即每个性别中年龄最大的两个人。最后的结果会包含四条数据,两条男性和两条女性。
阅读全文