SQL,最常出现的值

SQL,最常出现的值,sql,frequency,Sql,Frequency,我有两个典型的表,一对多关系的客户和联系人 例如,我的表是这样填充的: Customer ------------- CustomerId 1 Contact --------------- ContactId CustomerId FName LName Address CreatedAt 1 1 John Smith Add1 25/01/2013

我有两个典型的表,一对多关系的客户和联系人 例如,我的表是这样填充的:

Customer
-------------
CustomerId
    1

Contact
---------------
ContactId     CustomerId    FName      LName       Address       CreatedAt
    1             1         John       Smith       Add1         25/01/2013
    2             1         John       Cole        Add1         26/01/2013
    3             1         Alex       Cole        Add1         27/01/2013
    4             1         John       Smith       Add2         28/01/2013 
    5             1         Alex                   Add2         29/01/2013 
CustomerId    FName      LName       Address 
    1         John       Smith        Add1
我想在这5行中创建一个新行,条件如下:

对于每个字段(列),选择出现频率最高且不为null或空的字段

如果非出现次数多于其他记录,则应使用不为null或空的最新记录

因此,对于上述示例,行应如下所示:

Customer
-------------
CustomerId
    1

Contact
---------------
ContactId     CustomerId    FName      LName       Address       CreatedAt
    1             1         John       Smith       Add1         25/01/2013
    2             1         John       Cole        Add1         26/01/2013
    3             1         Alex       Cole        Add1         27/01/2013
    4             1         John       Smith       Add2         28/01/2013 
    5             1         Alex                   Add2         29/01/2013 
CustomerId    FName      LName       Address 
    1         John       Smith        Add1

谢谢

您没有指定哪些RDBMS,但我想这应该可以:

SELECT CustomerId, FName, LName, Address FROM Contact WHERE CustomerId = 1 GROUP BY FName, LName ORDER BY COUNT(*) DESC LIMIT 1

我可以为你写这个查询。我每小时收费100美元,最低计费时间为两小时,预付款。你有Paypal吗?展示你的尝试,然后我们可以帮助你。。。还有,哪些RDBMS——这可以是特定于DB的…谢谢Havenard,我使用的是SQL Server 2008 R2,第二个条件是createdAt如何?另外,请考虑它是一个示例,即联系人表具有更多的客户ID,因此SELECT结果将是相对于这些条件的一对一关系。再次感谢您的帮助我不知道您的意思,但我想您可以自己排序,以我刚才给您的查询为模型。