essayez ceci:
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)
SORTIE:
Person Event
----------- -----------
1 2
1 4
1 2
1 3
2 1
2 3
(6 row(s) affected)
OP ne dit pas quelle version de SQL Server, alors voici la CTE version gratuite pour pré SQL Server 2005, même sortie que ci-dessus:
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)
définir désambiguïsé? Premier? dernier? – TomTom
J'ai regardé la séquence de résultats trois fois et je n'arrive toujours pas à comprendre les règles utilisées pour la construire. Pouvez-vous expliquer un * lot * de plus, s'il vous plaît? –
J'ai besoin d'une liste où AUCUN deux événements Simlar de la même personne ne se suivent dans le temps. Si la séquence est 2 2 2 4 4 2 2 3 3 3 4 4, alors j'ai besoin de 2 4 2 3 4. – Martin