从基于等级的SQL查询结果中提取记录

问题描述:

我正在测试复杂的数据库规则,我需要帮助来制定逻辑以测试以下情况。从基于等级的SQL查询结果中提取记录

我有如下的输出假设表名临时

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:00以上的示例那样和下午1点30分,只有最早的时间戳记录被选中。我被允许选择第四条记录,因为它与第一条记录不是连续的。

我试过所有的排名(),row_number,自我加入组合,但没有奏效。任何人都可以帮忙吗?

+0

我刚才已经回答了类似的问题[这里](http://*.com/questions/42142981/how-to-group这个数据是我可以从每个组中抽出特定行/ 42145336#42145336)使用'LAG'和'ROW_NUMBER()'。我建议将TIMESTAMP作为'DATETIME'存储,因为...因为在数天内排序你的数据会让你感到头疼。如果时间是11:50然后是00:01怎么办? – scsimon

一种方法使用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; 
+0

这个提示为我工作。谢谢 – Chaitanya