Как найти отличительные имена (в столбце 1), вес которых (в столбце 2) всегда увеличивался в течение недель (в столбце 3) в большом запросе? - PullRequest
0 голосов
/ 20 апреля 2020

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

    name        week        weight
    tom         2020W10     76
    tom         2020W09     75
    tom         2020W08     74
    jane        2020W10     65
    jane        2020W09     65
    jane        2020W08     64

Так что в случае приведенных выше примерных данных я бы хотел видеть только Тома в моем результате, так как его вес всегда увеличивался за эти даты. В моем исходном наборе данных у меня есть 10000 имен и более 10 недель, поэтому очень сложно сделать более грубый подход. Я думал об использовании функции регрессии в большом запросе, но тогда мне пришлось бы сделать столько регрессий, сколько у меня уникальных имен. Я был бы очень признателен за любую помощь. Спасибо!

1 Ответ

1 голос
/ 20 апреля 2020

Один метод использует lag() и агрегирование:

with t AS (
      SELECT 'tom' AS name, '2020W10' AS week, 76 AS weight UNION ALL
      select 'tom' , '2020W09' , 75 UNION ALL
      select 'tom' , '2020W08' , 74 UNION ALL
      select 'jane' , '2020W10' , 65 UNION ALL
      select 'jane' , '2020W09' , 65 UNION ALL
      select 'jane' , '2020W08' , 64
    )
select t.name
from (select t.*, lag(weight) over (partition by name order by week) as prev_weight
      from t
     ) t
group by t.name
having countif(prev_weight >= weight) = 0 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...