【发布时间】:2017-10-26 18:42:06
【问题描述】:
如何在按时间顺序排列的组中进行搜索,并计算某个事件是否先于另一个事件发生?
我的数据显示为:
id | flow_nme | prod | RowFilter |
'20' | A2 | 1 | 1 |
'20' | A3 | 1 | 2 |
'30' | A3 | 1 | 1 |
'30 | A2 | 1 | 2 |
'40' | C1 | 1 | 1 |
'40' | C2 | 1 | 2 |
'40' | A3 | 1 | 3 |
'40' | A2 | 1 | 4 |
RowFilter 包含每个 id 组的时间排序。名称 A2、A3、C1 和 C2 没有真正含义,是虚拟名称。 RowFilter 是根据指示事件发生顺序的时间戳创建的。唯一确定事件“应该”发生的顺序是正常流程。本质上,我想统计正常流程没有发生的次数。
所以我想计算 A3 在 A2 之前和 C2 在 A3 之前出现的每个 id 的实例。
我的预期输出应该是这样的:
type | count |
A3-A2 | 2 |
C2-A3 | 1 |
我尝试过使用 OVER 和 PARTITION BY,但一定是做错了什么。
只要我有时间让这个问题易于重现,我就会着手编写代码来模拟数据。我对 R 比对 SQL 更熟悉,所以对我来说,这段代码的样子并不是很明显。
【问题讨论】:
-
按时间排序是什么意思?你怎么知道正确的顺序应该是什么?
-
大概正确的顺序是字典顺序(即自然)
-
如果
flow_nmes 对给定的id出现多次怎么办? -
按时间排序我指的是RowFilter实际上代表了时间。正确的顺序由特定的过程决定。所以,在我编造的例子中,A2 应该在 A3 之前发生,C2 应该在 A3 之前发生。
-
您的数据中没有任何内容表明 A3 在 A2 之前或之后,除非您可以使用 flow_nme 作为排序列。你怎么知道它没有跳过一个步骤,因为你没有主列表?为什么“第一”组步骤是准确的?
标签: sql sql-server tsql