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

利用可能な船の数が存在する可能性があります。そして、5列だけでなく、その船のETAがまったくない可能性があります.

なぜ 3 イータ? 船舶が港 A から 7 月 1 日に出航する場合、これは ETA_FROM の日付になり、港 B に向かう場合は 7 月 2 日、これは ETA_VIA になり、港 C に向かう場合は 7 月 3 日で、これは ETA_TO になります。この場合、ETA_FROM は 7 月 2 日、ETA_VIA は 7 月 3 日、ETA_TO は 7 月 4 日になります。3 つの 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 に答える