2015-11-04 73 views
0

我有一個具有以下信息的表格可能事件的所有組合:SQL甲骨文 - 尋找基於日期

數據樣本

**Table 1** 
palletNumber-- event-- --recordDate 
-----1-----------A-------01/11/2015 01:00 
-----1-----------B-------01/11/2015 02:00 
-----1-----------C-------01/11/2015 03:00 
-----1-----------D-------01/11/2015 04:00 
-----2-----------A-------01/11/2015 01:10 
-----2-----------C-------01/11/2015 01:15 
-----2-----------E-------01/11/2015 01:20 

我要選擇的事件中出現的所有可能的組合由palletNumber按recordDate的順序排列表。我嘗試過使用Row Number,Over Partition的各種語句,但這並沒有讓我接近我正在尋找的東西...任何方向去哪裏?

這將是例如輸出表:

**Table 2** 
event1-- event2-- 
---A------B------ 
---B------C------ 
---C------D------ 
---A------C------ 
---C------E------ 

感謝,

+0

嘗試'帶領/滯後(事件)一個記錄了(分區由palletNumber爲了通過recordDate)' – Tatiana

回答

2

使用lag()lead()你可以得到一個或下一個事件:

select event, 
     lead(event) over (partition by palletnumber order by recorddate) as next_event 
from datasample; 

如果你想消除重複,我會傾向於使用group by,因爲這也可以計算每個排的次數出現r:

select event, next_event, count(*) as cnt 
from (select event, 
      lead(event) over (partition by palletnumber order by recorddate) as next_event 
     from datasample 
    ) ds 
group by event, next_event; 
+0

非常感謝,我不知道鉛/落後!每天瞭解更多。 – Aurax22

0

使用案例:

select case when palletNumber = 1 then event else null end as event1, 
     case when palletNumber = 2 then event else null end as event2, 
     recordDate 
    from table1 

然後你可以使用數據導致/滯後總和()/ 組由得到它與工作一排。

假設事件1/2只有每日期

select recordDate, max (event1), max (event2) 
    from ( select case when palletNumber = 1 then event else null end as event1, 
        case when palletNumber = 2 then event else null end as event2, 
        recordDate 
       from table1 
      order by recordDate) tab2 
group by recordDate 
+0

如果我只有有限數量的托盤編號,但是我有數百個托盤編號,它就會起作用。然而,我確實使用了領先/滯後和團隊!謝謝 – Aurax22