我有一张fname | lname | startyear | endyear
的表格认为具有相同fname和lname的人是一个独特的人。 可以有多个具有相同fname | lname的条目。
1)我如何找到属于不同人的所有相同姓氏?
例如 'tom'|'jerry'| 1990 | 1991 |
'vlad'|''jerry'| 1991 | 1992 |
'tim'|'cook'| 1991 | 1992 |
'tim'|'cook'| 1992 | 1993 |
输出:
杰里
2)“Mary”Jane的两个词之间有哪些人(名字和姓氏)?
例如 'mary'|'jane'| 1989 | 1990 |
'tom'|'jerry'| 1990 | 1991 |
'vlad'|''jerry'| 1991 | 1992 |
'tim'|'cook'| 1991 | 1992 |
'tim'|'cook'| 1992 | 1993 |
'mary'|'jane'| 1993 | 1994
输出
汤姆杰里vlad jerry
蒂姆·库克
答案 0 :(得分:1)
1)在下面的查询中,内联视图将为您提供fname,lname&s的所有唯一组合,以及它与lname上的原始表连接,它将为您提供所有唯一的名称,但具有多个名字。
SELECT lname
FROM table t1
INNER JOIN
( SELECT fname,lname
FROM table
GROUP BY fname,lname
HAVING COUNT(1) = 1
) t2
ON t1.lname = t2.lname;
2)在此查询中,内联视图将返回Mary Jane所服务的术语的最小年份和最大年份,然后将其交叉连接到原始表格,并在startyear和endyear上完成比较,这将为您提供所有在玛丽珍之间服务的fname,lname&#。
SELECT fname,lname
FROM table t1
CROSS JOIN
( SELECT MIN(startyear) AS minstart,MAX(endyear) AS maxend
FROM table
WHERE fname = 'Mary' AND lname = 'Jane'
) t2
WHERE t1.startyear >= t2.minstart AND t1.endyear <= t2.maxstart;