2017-05-24 49 views
0

一个独特的价值中创建组SESSION_ID --- ---状态所需---

1C1A1111111 ---开始--- TRIP1 ---在Teradata的

1C1A1111111 ---? - -Trip1 ---

1C1A1111111 ---?--- TRIP1 ---

1C1A1111111 ---?--- TRIP1 ---

1C1A1111111 ---?--- TRIP1 ---

1C1A1111111 ---停止--- TRIP1 ---

1C1A1111111 ---?------

1C1A1111111 ---?------

1C1A1111111 ---?------

1C1A1111111 ---?------

1C1A1111111 ---开始--- TRIP2 ---

1C1A1111111 ---? --- Trip2- - ???

1C1A1111111 --- --- --- TRIP2

1C1A1111111 --- --- --- TRIP2

1C1A1111111 --- --- --- TRIP2

1C1A1111111 ---?--- TRIP2 ---

1C1A1111111 ---?--- TRIP2 ---

1C1A1111111 ---?--- TRIP2 ---

1C1A1111111 ---停止--- TRIP2 ---

+0

数据有两列,我需要根据开始创建TRIP1&TRIP2和停止,从而启动和停止之间的行一趟 –

+0

我假设你有一个时间戳列? –

+0

是的,我有时间戳列 –

回答

0
CASE -- check if current row is between start and stop 
    WHEN Last_Value(status IGNORE NULLS) 
     Over (PARTITION BY session_id 
       ORDER BY ts 
       ROWS Unbounded Preceding) = 'start' 
    OR status = 'stop' 

     -- increase trip number whenever status = 'start' 
    THEN Sum(CASE WHEN status = 'start' THEN 1 END) 
     Over (PARTITION BY session_id 
       ORDER BY ts 
       ROWS Unbounded Preceding) 
END 
+0

谢谢,这是伟大的,解决了我的问题 –