Преобразование запроса Oracle в Hive

#oracle #hive

#Oracle #улей

Вопрос:

Как я могу преобразовать приведенный ниже запрос в Oracle в Hive?

 SELECT A.EMP_NO, A.LOGIN_TIMESTAMP FROM TABLE1 A, TABLE2 B 
WHERE A.EMP_NO = 1234 AND B.EMP_CURR = 
(SELECT MIN(EMP_CURR) FROM TABLE2 WHERE EMP_NO = A.EMP_NO AND 
LOGIN_TIMESTAMP = A.LOGIN_TIMESTAMP AND EMP_STATUS_CODE <> 'P')
  

Ответ №1:

Используйте dense_rank() для получения строк с минимальным EMP_CURR :

 SELECT A.EMP_NO, A.LOGIN_TIMESTAMP
  FROM TABLE1 A
       INNER JOIN (select B.*, 
                          dense_rank() over(partition by B.EMP_NO, B.LOGIN_TIMESTAMP order by B.EMP_CURR) rn
                     from TABLE2 B where EMP_STATUS_CODE <> 'P'
                  ) B
                  on B.EMP_NO = A.EMP_NO and B.LOGIN_TIMESTAMP = A.LOGIN_TIMESTAMP and B.rn=1
  where B.rn=1 and A.EMP_NO = 1234;