如何计算一个话题在一段时间内的趋势率?

Posted

技术标签:

【中文标题】如何计算一个话题在一段时间内的趋势率?【英文标题】:How to calculate the rate of a topic's trend in a period of time? 【发布时间】:2020-03-10 18:21:14 【问题描述】:

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

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】:

让我们试试这个计算average rate:

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

【讨论】:

以上是关于如何计算一个话题在一段时间内的趋势率?的主要内容,如果未能解决你的问题,请参考以下文章

串口屏开发之历史曲线控件的使用总结——如何将传感器采集的温度数据在一段时间内的变化曲线显示在屏幕上

串口屏开发之历史曲线控件的使用总结——如何将传感器采集的温度数据在一段时间内的变化曲线显示在屏幕上

为啥托管在 Windows 服务内的 WCF 服务会在一段时间后死掉

如何在 SQL 中针对事务表计算一段时间内的覆盖日期?

如何检测变量是不是在一段时间内没有变化?

如何制作在一段时间内每天组合多个条目的折线图?