2017-12-08 8 views
0

특정 "name2"다음에 다음 "name1"을 (를) 검색하려고합니다. 예를 들어, "name2"에서 "complete2"다음의 "name1"은 "init3"입니다. 이것은 내가 사용하는 쿼리이지만 null을 반환합니다.하이브의 리드 기능

date_time     name1  name2   
    2017-11-23 00:09:46   init1  complete1 
    2017-11-23 00:09:48   init2  complete2 
    2017-11-23 00:09:50   init3  complete3 


    select date_time,name1,name2, 
    lead(name1,1) over (order by date_time) as next_word 
    from tab1 
    where date_time between "2017-11-23 00:00:00" and "2017-11-23 23:59:59" 
    and name2 like "%complete2%"; 

답변

1

여기 용액

SELECT * 
    FROM (SELECT date_time,name1,name2, 
       LEAD(name1,1) over (ORDER BY date_time) AS next_word 
      FROM tab1 
     WHERE date_time between "2017-11-23 00:00:00" and "2017-11-23 23:59:59") v 
WHERE name2 LIKE "%complete2%"; 

하이브 리드를 적용하기 전에 WHERE 조건을 평가

2017-11-23 00:09:48 init2 complete2 init3 

출력된다. 당신의 쿼리에서 LEAD가없는 레코드에 LEAD가 적용되는 것을 제한했을 것입니다.

위에서 수행 한 것처럼 하위 쿼리를 사용하거나 CTE/WITH 절을 사용할 수 있습니다.

희망이 도움이됩니다.