根据排名从 SQL 查询结果中选取记录



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

我有一个输出如下,假设表名 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.

我必须丢弃第二条记录,规则是,如果连续时间戳的输出与上面的 1:00 P.M. 和 1:30 P.M. 相同,status_key则仅拾取最早的时间戳记录。我可以选择第四张唱片,因为它不是与第一张唱片连续的。

我尝试了所有 rank((、row_number、自连接组合,但没有奏效。谁能帮忙?

一种方法使用lag(),另一种方法使用row_number()差。 后者适用于 SQL Server 2012 之前的版本。 有了lag()这很容易:

select t.*
from (select t.*,
             lag(status_key) over (partition by business_key order by create_timestamp) as prev_status_key
      from t
     ) t
where prev_status_key is null or prev_status_key <> status_key;

相关内容

  • 没有找到相关文章

最新更新