Как рассчитать скорость тренда топи c за период времени? - PullRequest
1 голос
/ 10 марта 2020

В этой таблице каждая топика c имеет дату и количество повторений. Как я могу найти топи c, который увеличивается с максимальной скоростью за определенный период времени? (не topi c с наибольшим числом повторений)

topic            dt            Count
"a"         2020-03-05           10  
"b"         2020-03-05           5   
"c"         2020-03-05           7   
"a"         2020-03-04           9  
"b"         2020-03-04           6   
"c"         2020-03-04           1   
"a"         2020-03-03           10  
"b"         2020-03-03           5   
"c"         2020-03-03           1

Например, в данной таблице "c" имеет тенденцию с наибольшей скоростью.

Спасибо заранее.

1 Ответ

2 голосов
/ 10 марта 2020

Давайте попробуем это, чтобы вычислить средний курс :

SELECT topic, 
       argMax(count, dt) - argMin(count, dt) AS f_delta, 
       max(dt) - min(dt) AS dt_delta, 
       (dt_delta > 0 ? f_delta / dt_delta : 0) AS avg_rate
FROM (
  /* test data */
  SELECT data.1 topic, toDate(data.2) dt, data.3 count
  FROM (
    SELECT arrayJoin([
    ('a', '2020-03-05', 10),
    ('b', '2020-03-05', 5),  
    ('c', '2020-03-05', 7), 
    ('a', '2020-03-04', 9),
    ('b', '2020-03-04', 6), 
    ('c', '2020-03-04', 1), 
    ('a', '2020-03-03', 10),
    ('b', '2020-03-03', 5),
    ('c', '2020-03-03', 1)]) data))
GROUP BY topic;
/*
┌─topic─┬─f_delta─┬─dt_delta─┬─avg_rate─┐
│ b     │       0 │        2 │        0 │
│ c     │       6 │        2 │        3 │
│ a     │       0 │        2 │        0 │
└───────┴─────────┴──────────┴──────────┘
*/
...