Я изо всех сил пытаюсь сделать "многострочную" формулу в U-SQL. Я упорядочил данные по дате, и для каждого я хочу найти первое значение «Порт», которое не равно значению текущей строки. Аналогичным образом я хочу найти последнюю строку в значении даты с текущим значением порта, чтобы выяснить, сколько дней судно находилось в порту. Имейте в виду, что это должна быть строка с тем же именем порта, без новых/других портов между ними.
Я загружаю свои данные следующим образом:
@res = SELECT
Port,
Date
FROM @data;
Вот как устроено мое свидание:
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 |
Как я хотел бы, чтобы данные были структурированы:
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
Я новичок в U-SQL, поэтому у меня возникли проблемы с тем, как к этому подойти. Моим первым побуждением было бы использовать некоторую комбинацию LEAD()/LAG() и ROW_NUMBER() OVER(PARTITION BY xx ORDER BY Date), но я не уверен, как получить точный эффект, который я ищу.
Может ли кто-нибудь указать мне в правильном направлении?