Sql server 基于排名从SQL查询结果中提取记录

Sql server 基于排名从SQL查询结果中提取记录,sql-server,rank,row-number,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:

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

我有一个如下的输出,比如说表名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和下午1:30时相同的status_键,则只拾取最早的时间戳记录。我可以选择第四条记录,因为它不是第一条的连续记录

我尝试了所有等级、行数、自连接组合,但没有成功。有人能帮忙吗?

一种方法使用滞后,另一种方法使用行数差。后者适用于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;

我刚才用LAG和ROW_数回答了一个类似的问题。我建议将时间戳存储为DATETIME。。。因为跨天排序数据会让你头疼。如果时间是11:50然后是00:01呢?