首页 > 解决方案 > 计算组内的滞后时间差

问题描述

我有一个包含事件 ID、日期和时间的表格,如下所示

ids: 1 1 1 1 1 2 2 2 2 2 
dates: 2021.03.10 2021.03.10 2021.03.10 2021.03.11 2021.03.11 2021.03.10 2021.03.11 2021.03.11 2021.03.11 2021.03.11
times: 12:00 12:01 12:03 12:04 12:05 13:01 13:05 13:06 13:12 13:15

t:([] ids:ids; dates:dates; times:times)

ids dates      times
--------------------
1   2021.03.10 12:00
1   2021.03.10 12:01
1   2021.03.10 12:03
1   2021.03.11 12:04
1   2021.03.11 12:05
2   2021.03.10 13:01
2   2021.03.11 13:05
2   2021.03.11 13:06
2   2021.03.11 13:12
2   2021.03.11 13:15

我想计算所有 id 在同一日期内连续时间之间的差异。如果在单个日期中只有一次,我希望该值为 0。所需的输出看起来像

ids dates      times   deltaMinutes
----------------------------------
1   2021.03.10 12:00   0
1   2021.03.10 12:01   1
1   2021.03.10 12:03   2
1   2021.03.11 12:04   0
1   2021.03.11 12:05   1
2   2021.03.10 13:01   0
2   2021.03.11 13:05   0
2   2021.03.11 13:06   1
2   2021.03.11 13:12   6
2   2021.03.11 13:15   3

用qsql可以实现吗?

标签: kdbqsqlquery

解决方案


q)update deltaMinutes:`int$-':[first times;times]by ids,dates from t
ids dates      times deltaMinutes
---------------------------------
1   2021.03.10 12:00 0
1   2021.03.10 12:01 1
1   2021.03.10 12:03 2
1   2021.03.11 12:04 0
1   2021.03.11 12:05 1
2   2021.03.10 13:01 0
2   2021.03.11 13:05 0
2   2021.03.11 13:06 1
2   2021.03.11 13:12 6
2   2021.03.11 13:15 3
2   2021.03.12 11:00 0

-':只是deltas,但似乎二进制应用程序不支持增量


推荐阅读