【发布时间】:2017-07-02 01:32:28
【问题描述】:
我正在测试一个复杂的数据库规则,我需要帮助来制定逻辑来测试以下场景。
我有一个如下的输出,比如说表名 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:00 一样。和下午 1:30,只拾取最早的时间戳记录。我可以选择第四条记录,因为它与第一条不连续。
我尝试了所有 rank()、row_number、self join 组合,但没有奏效。有人可以帮忙吗?
【问题讨论】:
-
我刚刚使用
LAG和ROW_NUMBER()回答了类似的问题here。我建议将该 TIMESTAMP 存储为DATETIME......因为跨天订购数据会让您有些头疼。如果时间是 11:50,然后是 00:01?
标签: sql-server rank row-number