我正在尝试为以下数据编写基于时间序列的过滤器。
S.No Name. Version. Time
1. Dashboard 20 Apr-01
2. Search 20 Apr-02
3. Dashboard 21 May-01
4. Search 20 May-02
5. Search 21 May-03
6. Dashboard 22 Jun-01
7. Search 20 Jun-02
8. Search 22 Jun 02
9. Dashboard 23 Jun-05
10. Search 21 Jun-06
11. Search 20 Jun-06
正在寻找的过滤器是两步过滤器。
步骤1-(子集): 捕获某个版本的仪表板的首次出现时间。考虑这些是我们的发布日期。我们需要查找发布新版本后发生的旧版本搜索事件的计数。这里的版本号可能不是顺序的。
Name. Version. Time
Dashboard 20 Apr-01
Dashboard 21 May-01
Dashboard 22 Jun-01
Dashboard 23 Jun-05
必需的实际输出:版本20的搜索条目的数量,该发布发生在版本21(示例中为5月1日)之后,等等...(版本22的发布之后的版本21的搜索条目)。 ..)
Outliers Version Count
Search 20 3 //4, 7, 11th rows
Search 21 1 //10th row
Search 22 0 //Should be avoided in the output if possible.
在SQL中,我们通常编写ctes来实现此结果集。 kusto和dunno的新手,如何编写子查询或临时查询。
有人可以在这里帮助我吗?
答案 0 :(得分:0)
您可以尝试这样的事情:
av_free(frame);
av_freep(frame);
->
datatable(series:int, Name:string, Version:long, Time:datetime)
[
1, 'Dashboard', 20, datetime(2020-04-01),
2, 'Search', 20, datetime(2020-04-02),
3, 'Dashboard', 21, datetime(2020-05-01),
4, 'Search', 20, datetime(2020-05-02),
5, 'Search', 21, datetime(2020-05-03),
6, 'Dashboard', 22, datetime(2020-06-01),
7, 'Search', 20, datetime(2020-06-02),
8, 'Search', 22, datetime(2020-06-02),
9, 'Dashboard', 23, datetime(2020-06-05),
10, 'Search', 21, datetime(2020-06-06),
11, 'Search', 20, datetime(2020-06-06),
]
| as T
| where Name == "Dashboard"
| summarize min(Time) by Version = Version - 1, Name
| join kind=leftouter(
T
| where Name != "Dashboard"
| extend Version = Version
) on Version
| where Time > min_Time
| summarize count(), series = strcat_array(make_set(series), ", ") by Outlier = Name1, Version
感谢Yoni。 修改为prev而非版本-1。
| Outlier | Version | count_ | series |
|---------|---------|--------|----------|
| Search | 20 | 3 | 4, 7, 11 |
| Search | 21 | 1 | 10 |