从基于等级的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,自我加入组合,但没有奏效。任何人都可以帮忙吗?
答
一种方法使用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
我刚才已经回答了类似的问题[这里](http://*.com/questions/42142981/how-to-group这个数据是我可以从每个组中抽出特定行/ 42145336#42145336)使用'LAG'和'ROW_NUMBER()'。我建议将TIMESTAMP作为'DATETIME'存储,因为...因为在数天内排序你的数据会让你感到头疼。如果时间是11:50然后是00:01怎么办? – scsimon