3

我写了一个视图,它给了我以下输出

Vessel Name ETA
XYZ    1-Jul-12
XYZ    2-Jul-12
XYZ    3-Jul-12
XYZ    4-Jul-12
XYZ    5-Jul-12
XYZ    6-Jul-12
XYZ    7-Jul-12

其实我想得到如下输出

Vessel Name    ETA_1    ETA_2        ETA_3
XYZ           1-Jul-12  2-Jul-12    3-Jul-12
XYZ           2-Jul-12  3-Jul-12    4-Jul-12
XYZ           3-Jul-12  4-Jul-12    5-Jul-12
XYZ           4-Jul-12  5-Jul-12    6-Jul-12
XYZ           5-Jul-12  6-Jul-12    7-Jul-12

可能没有可用的船只。该船可能没有任何 ETA,而不仅仅是 5 排。

为什么是三个 etas?一艘船在 7 月 1 日从 A 港航行,然后这将是 ETA_FROM 日期,然后在 7 月 2 日到 B 港,然后这将是 ETA_VIA,然后在 7 月 3 日到 C 港,然后这将是 ETA_TO。然后它再次于 2012 年 7 月 4 日在 7 月 5 日从 C 港航行到 D,然后在这种情况下,ETA_FROM 将是 02-7 月,ETA_VIA 将是 03-7 月,ETA_TO 应该是 4-7 月。三个 eta 中最小的将是 ETA_FROM 日期,下一个更高的日期是 ETA_VIA 日期,下一个更高的日期是 ETA_TO 日期。

编辑:我试过这个,但性能很差:

select t1.vessel_name,
       t1.eta ETA_FROM ,
       t2.eta ETA_VIA , 
       t3.eta ETA_TO 
from 
  test t1,
  test t2, 
  test t3 
where t1.eta<t2.eta and 
      t3.eta>t2.eta and 
      t1.eta=(select max(test.eta) 
              from test 
              where test.eta<t2.eta) 
      and t3.eta= (select min(test.eta) 
                   from test 
                   where test.eta>t2.eta) 
4

1 回答 1

3
select 
    * 
from (
    select 
        vessel, 
        eta, 
        lead(eta) over (order by eta) as eta2,
        lead(port) over (order by eta) as port2,
        lead(eta,2) over (order by eta) as eta3,
        lead(port,2) over (order by eta) as port3
    from your_view
)
where 
     eta3 is not null;
于 2013-07-05T06:12:17.460 回答