我正在努力研究如何在 U-SQL 中制作“多行”公式。我已经按日期对数据进行了排序,并且对于每个 for,我想找到不等于当前行值的“端口”的第一个值。以类似的方式,我想用当前港口值找到日期值的最后一行,以计算出一艘船在港口停留了多少天。请记住,这必须是具有相同端口名称的行,中间没有新的/其他端口。
我正在像这样加载我的数据:
@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) 的某种组合,但我不确定如何获得我正在寻找的确切效果。
谁能指出我正确的方向?