从基于排名的SQL查询结果中获取记录

时间:2017-02-13 22:24:12

标签: sql-server rank row-number

我正在测试一个复杂的数据库规则,我需要帮助来制定逻辑以测试下面的场景。

我有一个输出如下,让我们说表名temp

BUSINESS_KEY     STATUS_KEY   CREATE_TIMESTAMP
123               a1          1 P.M.
123               a1          1:30 P.M.
123               b1          2:00 P.M.
123               a1          2:30 P.M.

我必须从以上

中获取以下记录
BUSINESS_KEY     STATUS_KEY   CREATE_TIMESTAMP
123               a1          1 P.M.
123               b1          2:00 P.M.
123               a1          2:30 P.M.

我必须丢弃第二条记录,规则是如果相同的status_key在输出中输入连续的时间戳,就像在凌晨1点的示例中那样。下午1:30,只收到最早的时间戳记录。我被允许选择第四条记录,因为它不是第一条记录的连续记录。

我尝试了所有rank(),row_number,自联接组合,但没有奏效。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

一种方法使用<Directory>,另一种方法使用lag()的差异。后者适用于SQL Server 2012之前。使用row_number()这很容易:

lag()