2016-06-16 2 views
0

Ich habe eine Tabelle mit Nachrichten von Besuchern einer Website gesendet. Ich möchte diese Nachrichten gruppieren können, wenn der Besucher mehr als eine Nachricht gesendet hat. Mit "diese Nachrichten gruppieren" bezeichne ich die auf der Webseite gruppierten Nachrichten, die nicht in relationaler Logik gruppiert sind. Ich mag etwas wie folgen aus:wie eine Sequenz basierend auf dem Wert einer Spalte generiert werden

s email   messageid  
1 [email protected]  1  
1 [email protected]  3  
1 [email protected]  143  
2 [email protected]  343 
2 [email protected]  3 
3 [email protected]  3 

Wie Sie die „s“ Spalte sehen können, hat die gleiche Nummer, wenn die E-Mail die gleiche ist.

Ich habe versucht:

select ROW_NUMBER() over(partition by m.email order by m.email) as s 

ich dieses:

s email   messageid  
1 [email protected]  1  
2 [email protected]  3  
3 [email protected]  143  
1 [email protected]  343 
2 [email protected]  3 
1 [email protected]  3 

Eine Sequenz für jede E-Mail berechnet wird.

+0

'... ORDER BY [s]'? –

Antwort

3

Ich nehme an, s ist die neue Spalte? Sie können DENSE_RANK() Fensterfunktion verwenden:

SELECT DENSE_RANK() OVER(ORDER BY t.email) as [s], 
     t.email,t.messageid 
FROM YourTable t 
+1

zu schnell für mich. Es sollte jedoch "DENSE_RANK" sein, wenn Sie fortlaufende Nummern wünschen. –

+0

@ZoharPeled Ja, Sie sind richtig, danke :) – sagi

+0

Es hat funktioniert! Vielen Dank! –

Verwandte Themen