Как мне искать в предыдущих строках? - PullRequest
1 голос
/ 24 сентября 2019

У меня есть такие данные:

+-----+--------+---------+-------+--+
| row | object |  date   |  size |  |
+-----+--------+---------+-------+--+
|   1 |     17 | 19.6.3  | 6 **  |  |
|   2 |     17 | 19.5.2  | 5 *   |  |
|   3 |     17 | 19.1.1  | 3     |  |
|   4 |     17 | 18.6.6  | 5 **  |  |
|   5 |     17 | 17.4.4  | 4     |  |
|   6 |     88 | 19.3.12 | 2     |  |
+-----+--------+---------+-------+--+

Строка и звездочки только для этого вопроса.

Мне удалось вычислить предыдущую дату и предыдущий размер для каждой строкивнутри объекта с использованием функции задержки (поэтому для строки 1 предыдущая дата = 19.5.2, предыдущий размер = 5).

(хотя эти значения не хранятся в БД.)

Теперь яхотите сделать что-то вроде следующего псевдокода:

Для объекта:

, если размер увеличился с предыдущей даты (для данных приведенного выше примера, true для строк 1, 2, 4) (легко вычислить)

Текущий размер, который не встречался до даты этой строки (true для строк 1 и 4), затем установите Flag = true для этой строки.(Вот где я застрял)

Я думал, что SUBQUERY и / или окно ROWS UNBOUNDED FOLLOWING могло бы помочь, но не знаю, с чего начать.

TIA!

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете использовать оконные функции:

select t.*,
       (case when size > lag(size) over (partition by object order by date) and
                  row_number() over (partition by object, size order by date) = 1
             then 1   -- true
             else 0   -- false
        end) as flag
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...