这是我的PEOPLE表,我在其中存储姓名,姓氏,DOB(出生日期)和其他一些数据。在一个新的查询中,我需要添加其他列,其中包含姓名和姓氏组合相同的人的条件。这是条件:
这是查询的结果
说明:
请帮助形成所需输出的SQL查询。这是我的理解(猜测)
答案 0 :(得分:1)
首先group by name, surname
以获得出现次数以及每个名称和姓氏的最小和最大dob并将结果联接到表中。
对于CASE语句,请应用条件:
select
p.*,
case
when g.counter in (1, 2) then 'mark'
else case
when p.dob not in (g.mindob, g.maxdob) then 'mark'
end
end Checkbox
from peaople inner join (
select
name, surname,
count(*) counter,
min(dob) mindob,
max(dob) maxdob
from people
group by name, surname
) g on g.name = p.name and g.surname = p.surname
答案 1 :(得分:0)
在MySQL 8+中使用窗口函数:
select p.*,
(case when count(*) over (partition by name, surname) <= 2
then 'mark'
when row_number() over (partition by name, surname order by dob) > 1 and
row_number() over (partition by name, surname order by dob desc) > 1
then 'mark'
end) as checkbox
from people p;
注意:如果最早或最晚生日有重复项,则仅排除其中之一。如果要排除所有这些,请使用rank()
而不是row_number()
。