試試這個:
DECLARE @YourTable table (Person int, Event int, Time int)
SET NOCOUNT ON
INSERT INTO @YourTable VALUES (1, 2 , 1)
INSERT INTO @YourTable VALUES (1, 2 , 20)
INSERT INTO @YourTable VALUES (1, 2 , 33)
INSERT INTO @YourTable VALUES (2, 1 , 34)
INSERT INTO @YourTable VALUES (1, 4 , 43)
INSERT INTO @YourTable VALUES (1, 2 , 44)
INSERT INTO @YourTable VALUES (2, 3 , 45)
INSERT INTO @YourTable VALUES (1, 2 , 46)
INSERT INTO @YourTable VALUES (1, 3 , 50)
INSERT INTO @YourTable VALUES (1, 3 , 55)
SET NOCOUNT OFF
;WITH Ranked AS
(SELECT
Person,Event,Time
,ROW_NUMBER() OVER(PARTITION by Person order by time,Person, Event) AS RowNumber
FROM @YourTable
)
SELECT
r1.Person,r1.Event
FROM Ranked r1
LEFT OUTER JOIN Ranked r2 ON r1.RowNumber=r2.RowNumber-1 AND r1.Person=r2.Person
WHERE r1.Event!=ISNULL(r2.Event,-999)
OUTPUT:
Person Event
----------- -----------
1 2
1 4
1 2
1 3
2 1
2 3
(6 row(s) affected)
OP不說哪個版本的SQL Server,所以這裏的CTE免費版預SQL Server 2005,輸出如上:
SELECT
r1.Person,r1.Event
FROM (SELECT
Person,Event,Time
,ROW_NUMBER() OVER(PARTITION by Person order by time,Person, Event) AS RowNumber
FROM @YourTable
) r1
LEFT OUTER JOIN (SELECT
Person,Event,Time
,ROW_NUMBER() OVER(PARTITION by Person order by time,Person, Event) AS RowNumber
FROM @YourTable
) r2 ON r1.RowNumber=r2.RowNumber-1 AND r1.Person=r2.Person
WHERE r1.Event!=ISNULL(r2.Event,-999)
定義消歧?第一?持續? – TomTom 2010-03-22 13:34:00
我已經看了三次結果序列,我仍然無法弄清楚構建它的規則。你能解釋一大堆*嗎? – 2010-03-22 13:49:13
我需要一個列表,其中同一個人的兩個同類事件沒有及時跟隨彼此。如果序列是2 2 2 4 4 2 2 3 3 3 4 4,那麼我需要2 4 2 3 4. – Martin 2010-03-22 13:58:04