2016-03-08 42 views
0

这是一个奇怪的要求。我有一张约1000万行的表格。在这些行中是sourcename,sourceState和date。我想要做的是创建一个非重复行列表,基本上有每个源名称,源状态和日期......但每个行的最早。从表格数据中推断出来源和日期范围

所以,例如...可以说我有一行,源状态是FL,来源是布劳沃德县和小羽毛记录它出现在数据库中是19960912(这是如何日期和它在一个varchar列),但是其他FL和Broward County条目有1000个,我需要将它们全部抛出,只留下唯一的源状态,源名和日期...对于表中存在的每个唯一源名称.. 500左右。

+0

的可能的复制[SQL:如何选择早到行(http://stackoverflow.com/questions/5736820/sql-how-to-select-early-row) –

回答

-1

试试这个

SELECT DISTINCT SOURCENAME, SOURCESTATE, MIN(DATE) FROM TABLE_A 
    GROUP BY SOURCENAME, SOURCSTATE 
+0

这真的很好用!有没有一种方法可以将结果按sourcestate分组? – Sal

+0

为什么不能。 。只需从Group By和SELECT子句中删除SOURCENAME。@Sal –

+0

为什么Downvote先生@devotee ...没有任何解释它没有明确的理解..好吧谢谢 –

1

想到什么是row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by sourcename order by date asc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
+0

问题在这方面措辞不佳,但我认为OP需要按名称和状态分组的结果,而不仅仅是名称。注意他在“unique sourcename”之前的句子中提到了“unique sourcestate”。当然,措辞不佳,肯定。 –

+0

这会删除最早的源名和日期以外的所有数据吗?另外我应该提到表名是PEOPLE – Sal

+0

这将返回每个唯一源名称的最早发生,并且如果有两个具有相同源名称的状态,则只返回这些状态的_one_。 –