Выберите предыдущее значение в Hive SQL - PullRequest
0 голосов
/ 16 мая 2018

Я ткнул в это некоторое время и мне не повезло.У меня есть таблица, как показано ниже.Я пытаюсь получить значение col до первого текстового значения для пользователя.Я на Улей.

user    ts            col      isnumber
1       1473811200    5         y
1       1473811205    10        y
1       1473811207    15        y
1       1473811212    text1     n
1       1473811215    text2     n
1       1473811225    30        y
2       1473811201    10        y
2       1473811205    text3     n
2       1473811207    20        y
2       1473811210    30        y

Вывод должен быть:

user    col
1       15
2       10

1 Ответ

0 голосов
/ 16 мая 2018

Использование оконных функций:

SELECT user_, prev
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY user_ ORDER BY ts) AS rn
      FROM (SELECT *, CASE 
                WHEN isnumber = 'y' THEN NULL
                WHEN LAG(isnumber,1) OVER(PARTITION BY user_ ORDER BY ts) = 'y'
                     THEN LAG(col,1) OVER(PARTITION BY user_ ORDER BY ts)
               END AS prev
             FROM tab) sub
    WHERE prev IS NOT NULL) sub2
WHERE rn = 1;

DBFiddle Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...