Ich habe Schwierigkeiten, eine "mehrzeilige" Formel in U-SQL zu erstellen. Ich habe die Daten nach Datum sortiert, und für jeden möchte ich den ersten Wert von "Port" finden, der nicht dem Wert der aktuellen Zeile entspricht. In ähnlicher Weise möchte ich die letzte Zeile im Datumswert mit dem aktuellen Port-Wert finden, um herauszufinden, wie viele Tage ein Schiff im Hafen war. Beachten Sie, dass es sich dabei um die Zeile mit dem gleichen Anschlussnamen handelt, zwischen denen keine neuen/anderen Anschlüsse vorhanden sind.U-SQL Wie wähle ich den ersten Wert in einer Spalte, die sich von der aktuellen Zeile unterscheidet?
ich meine Daten bin Laden in wie folgt aus:
@res = SELECT
Port,
Date
FROM @data;
Dies ist, wie mein Tag strukturiert:
Port | Date |
Port A | 1/1/2017 |
Port A | 1/1/2017 |
Port A | 1/2/2017 |
Port B | 1/4/2017 |
Port B | 1/4/2017 |
Port B | 1/4/2017 |
Port B | 1/5/2017 |
Port B | 1/6/2017 |
Port C | 1/9/2017 |
Port C | 1/10/2017 |
Port C | 1/11/2017 |
Port A | 1/14/2017 |
Port A | 1/15/2017 |
Wie ich möchte die Daten strukturiert werden:
Port | Date | Time in Port | Previous Port
Port A | 1/1/2017 | 0 | N/A
Port A | 1/1/2017 | 0 | N/A
Port A | 1/2/2017 | 1 | N/A
Port B | 1/4/2017 | 0 | Port A
Port B | 1/4/2017 | 0 | Port A
Port B | 1/4/2017 | 0 | Port A
Port B | 1/5/2017 | 1 | Port A
Port B | 1/6/2017 | 2 | Port A
Port C | 1/9/2017 | 0 | Port B
Port C | 1/10/2017 | 1 | Port B
Port C | 1/11/2017 | 2 | Port B
Port A | 1/14/2017 | 0 | Port C
Port A | 1/15/2017 | 1 | Port C
Ich bin neu in U-SQL und so habe ich ein bisschen Schwierigkeiten, wie man das angehen kann. Mein erster Instinkt wäre, eine Kombination aus LEAD()/LAG() und ROW_NUMBER() OVER (PARTITION BY xx ORDER BY Datum) zu verwenden, aber ich bin mir nicht sicher, wie ich genau den gewünschten Effekt erzielen kann.
Kann mir jemand in die richtige Richtung zeigen?
Sind die Duplikate notwendig? –