2015-09-09 47 views
0

我很少使用SQL,但是對於此任務它可能是最合適的。我期待創建一個能夠檢測每個主題事件的首次發生的查詢。SQL:First Occurence和值

實錄:

------------------------------ 
personID | date | incident 
------------------------------ 
1   20150901  F1 
2   20150101  B2 
3   20150301  C3 
1   20150901  B2 
3   20150401  R5 
2   20150401  C3 
1   20150701  F1 

通緝的結果:

------------------------------ 
personID | date | incident 
------------------------------ 
2   20150101  B2 
3   20150301  C3 
3   20150401  R5 
2   20150401  C3 
1   20150701  F1 
1   20150901  B2 

簡單:我正在尋找事故發生在每個PERSONID第一(根據日期)期間,如果事件忽略再次出現。

謝謝

PS。使用SQL Server 2008

+0

我有。但是,因爲我正在首次查找每個personID發生的事件。 personID可能會發生多個不同的事件。 – Dan

回答

1

使用MIN應該對這項工作:

select personId,incident,MIN(convert(date,date)) as date 
from [table] 
group by personId,incident 
+0

非常感謝您的回覆。它正是我需要的。是否可以修改查詢,然後在僅與已分組的那些相關的特定字段上執行PDATE/SET? – Dan

+0

@丹你試圖更新哪個字段? –

0

您可以使用row_number函數來獲得所需的結果。

Fiddle with sample data

select personid, date, incident 
from 
(
select *, row_number() over(partition by personid, incident order by date) as rn 
from tablename 
) x 
where x.rn = 1; 
+0

謝謝你。是否有可能修改查詢以允許更新? – Dan

0

試試這個:

;WITH 
    temp AS (
     SELECT personID, date, incident, 
       rn = ROW_NUMBER() OVER (PARTITION BY personID, incident ORDER BY date) 
     FROM my_table 
    ) 

SELECT * 
FROM temp 
WHERE rn = 1