Sql 如何获取具有最小出生日期的唯一员工记录?
如果名称字段重复,则只应提取一个名称;如果一个名称为男性,另一个名称为女性,则应提取女性;如果两个名称具有相同的性别,则应提取最低的DOBSql 如何获取具有最小出生日期的唯一员工记录?,sql,oracle,Sql,Oracle,如果名称字段重复,则只应提取一个名称;如果一个名称为男性,另一个名称为女性,则应提取女性;如果两个名称具有相同的性别,则应提取最低的DOB INPUT: NAME GENDER DOB --------- ------ ------- ABC M 20-MAR-18 ABC M 30-MAR-18 DEF M 20-MAR-18 DEF F 25-MAR-18 GHI F 20
INPUT:
NAME GENDER DOB
--------- ------ -------
ABC M 20-MAR-18
ABC M 30-MAR-18
DEF M 20-MAR-18
DEF F 25-MAR-18
GHI F 20-MAR-18
GHI M 10-MAR-18
JKL F 20-MAR-18
JKL F 10-MAR-18
OUTUT:
NAME GENDER DOB
--------- ------ -------
ABC M 20-MAR-18
DEF F 25-MAR-18
GHI F 20-MAR-18
JKL F 10-MAR-18
您可以使用窗口功能: 选择姓名、性别、出生日期 从…起 选择姓名、性别、出生日期、, 第二排 按名称划分-按名称分组 按性别排序,DOB-按性别排序,每个姓名组内的DOB 作为行号 从MyTable src 其中RowNumber=1-每组仅获取一行 ;
您可以使用窗口功能: 选择姓名、性别、出生日期 从…起 选择姓名、性别、出生日期、, 第二排 按名称划分-按名称分组 按性别排序,DOB-按性别排序,每个姓名组内的DOB 作为行号 从MyTable src 其中RowNumber=1-每组仅获取一行 ;
嗨,这里-当你发布问题时,你能发布你尝试过的,你的问题是什么,而不是简单的,你能告诉我怎么做吗。。。你应该先尝试一些事情,然后如果你有问题,问一下…看看那里-当你发布问题时,你能发布你已经尝试过的,你的问题是什么,而不是简单的,你能告诉我怎么做吗。。。你应该先尝试一些东西,然后如果你有问题问…看看我想我解决了。我想我解决了。
SELECT * FROM (
SELECT
p.*,
row_number() OVER (partition by name order by gender, dob) as rn
FROM Person p
) WHERE rn = 1
select
name,
min(gender) keep(dense_rank first order by decode(gender, 'F', 0, 1)) gender,
min(dob) keep(dense_rank first order by decode(gender, 'F', 0, 1)) dob
from
emp
group by
name