2016-09-15 110 views
0

我有FNAME表| L-NAME | 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'| 1989 | 1990 |

'tom'|'jerry'| 1990 | 1991 |

'vlad'|'jerry'| 1991 | 1992 |

'tim'|'cook'| 1991 | 1992 |

'tim'|'cook'| 1992 | 1993 |

'玛丽' |'简| 1993 | 1994年

输出

汤姆杰里

维拉德杰里

库克

+0

您能否提供样本输入和输出? – Teja

+0

alrite编辑。请看看 – RStyle

+0

在询问SQL问题时,请始终包含您正在使用的特定数据库。 – sstan

回答

1

1)在本下面的查询中,内联视图为您提供了fname,lname's和它与lname上的原始表格的所有独特组合,它将为您提供所有独特的lnames,但首先有多个名。

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)在此查询,线视图将返回分钟年份和玛丽珍供应,那么它的跨加入原表和比较的startyear和endyear所做的条款最多一年这将给你所有在玛丽珍之间服务的人名。

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; 
+0

如果你喜欢这个soln,你可以upvote .... – Teja

相关问题