是否可以通过将第一条记录与之前的记录进行比较来构造一个返回 0 或 1(真/假)的查询?
表中示例记录:
ProductID SampleDate RunFailure LevelCode
101 20160322 0 2
101 20160321 0 3
101 20160320 1 2
101 20160318 1 2
102 20160317 0 3
102 20160316 0 2
102 20160315 0 1
103 20160314 1 1
103 20160313 0 2
103 20160312 1 3
我需要按 ProductID 评估最近的记录。在上面的示例中,最后一条记录(在 20160322 上)的 LevelCode 为 2。需要将它与 20160320 上的记录进行比较,因为它是最后一条失败且具有相同 LevelCode 的记录(因此它将忽略 20160318 上的记录,因为它早于 20 日的记录),因此,在这种情况下,查询将返回 1(或 true)。
对于 ProductID 102,查询将返回 0(或 false),因为 20160317 上的 LevelCode 为 3,并且不存在使用相同 LevelCode 失败的旧记录。
ProductID 103 将返回 0(假),因为在 20160314 LevelCode 为 1,而失败的 ProductID 的最后一条记录是在 20160312 上用于 LevelCode3
理想情况下,查询会返回如下内容:
ProductID IsMostCurrentRunSameLevelAsLastFailedRun
101 1
102 0
103 0
一种方法是使用 CROSS APPLY。
如果您在第一个表中确定每个产品的最新记录,然后将条件传递到交叉应用中。
或者,查看窗口函数。你可以用它们做很多可能更有效率的事情。