Как найти клиентов с одинаковым рисунком со временем? - PullRequest
0 голосов
/ 19 мая 2018

У меня есть таблица со столбцами ID, DATES, RATES, один ID (клиент) имеет несколько rates, но можно иметь только один rate на один конкретный date.

ID     DATES          RATES
 5     2014-07-01     0.02
 5     2014-07-02     0.03
 5     2014-07-03     0.04

Таким образом, один ID может иметь только один путь изменения скорости во времени, потому что одному ID был назначен только один rate для конкретного date.Но есть некоторые ID, имеющие точно такой же путь изменения скорости во времени, потому что один и тот же rate может быть назначен нескольким ID с.например, ID 5 & 6 имеют один и тот же путь изменения скорости во времени.

ID    DATES          RATES
 5    2014-07-01     0.02
 5    2014-07-02     0.03
 5    2014-07-03     0.04
 6    2014-07-01     0.02
 6    2014-07-02     0.03
 6    2014-07-03     0.04

Моя цель состоит в том, чтобы найти клиентов с одинаковыми путями изменения тарифов во времени (идеальным результатом было бы, если путь тарифа 1 включает ID 5 & 6. Столбцы ID включают ID с тем же путем изменения скорости).

Rate Path                  ID
  1                        5,6
  2                        1,3

Я надеюсь использовать пакет R или sqldf в Rstudio для решения этой проблемы.Пример таблицы показан ниже.Есть один момент, на который нужно обратить внимание: идентификаторы 1 и 3 используют один и тот же шаблон, даже если идентификатор 3 появился на один день позже, чем идентификатор 1, но если вы составите линейный график с указанием их ставок, две линии будут полностью перекрываться.однако идентификаторы 1 и 2 не используют один и тот же шаблон, поскольку, хотя первые три дня они используют один и тот же шаблон, но в последний день их показатели различаются.Две линии не будут пересекаться.

ID       DATES         RATES
 1     2014-07-01       0.02
 1     2014-07-02       0.03
 1     2014-07-03       0.04
 1     2014-07-04       0.05
 2     2014-07-01       0.02
 2     2014-07-02       0.03
 2     2014-07-03       0.04
 2     2014-07-04       0.06
 3     2014-07-02       0.03
 3     2014-07-03       0.04
 3     2014-07-04       0.05

В настоящее время я использую парную сумму абсолютной разницы для решения этой проблемы.Но большие данные требуют много вычислений впоследствии.Я думаю о каких-либо других лучших способах решения этой проблемы?

1 Ответ

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

Вы, похоже, ищете одну вещь, являющуюся точным подмножеством другой.Одним из естественных подходов было бы использование массивов.Однако я не знаю простого «содержимого», которое соответствует как порядку, так и элементам.Итак, я буду использовать строки:

with t as (
      select id,
             (',' || string_agg(rate, ',' order by date) || ',') as rates
      from yourtable t
      group by id
     )
select t1.*, t2.*
from t join
     t t2
     on t.rates like '%' || t2.rates || '%';
...