首页 > 解决方案 > 如何计算一个话题在一段时间内的趋势率?

问题描述

在此表中,每个主题都有一个日期和重复次数。如何找到一段时间内增长最快的话题?(不是重复次数最多的主题)

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”的趋势最高。

提前致谢。

标签: clickhouse

解决方案


让我们试试这个来计算平均费率

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 │
└───────┴─────────┴──────────┴──────────┘
*/

推荐阅读