SQL - 忽略重新获取条目

时间:2015-10-27 08:49:05

标签: sql

我需要一种方法来连续获取第一个条目,如果第二行中的值相同则忽略它,依此类推。 我正在看的领域是checktype。所以得到第一个我,然后是O然后我排除重复的行。

**实施例**

<p>USERID   CHECKTIME       CHECKTYPE   VERIFYCODE</p>
<p>2    2015-10-19 07:50:32.000 I       0   1</p>
<p>2    2015-10-19 09:17:57.000 I       6   1</p>
<p>2    2015-10-19 09:19:31.000 O       0   1</p>
<p>2    2015-10-19 10:16:32.000 I       6   1</p>
<p>2    2015-10-19 10:19:44.000 O       6   1</p>
<p>2    2015-10-19 13:41:41.000 O       6   1</p>
<p>2    2015-10-19 13:41:46.000 I       6   1</p>
<p>2    2015-10-19 13:50:29.000 O       0   1</p>
<p>2    2015-10-19 16:03:00.000 I       6   1</p>

**我需要返回**

<p>2    2015-10-19 07:50:32.000 I       0   1</p>
<p>2    2015-10-19 09:19:31.000 O       0   1</p>
<p>2    2015-10-19 10:16:32.000 I       6   1</p>
<p>2    2015-10-19 10:19:44.000 O       6   1</p>
<p>2    2015-10-19 13:41:46.000 I       6   1</p>
<p>2    2015-10-19 13:50:29.000 O       0   1</p>
<p>2    2015-10-19 16:03:00.000 I       6   1</p>

2 个答案:

答案 0 :(得分:0)

使用LAG查看上一条记录,比较CHECKTYPE和标记重复记录。然后排除这样找到的记录。

select userid, checktime, checktype, verifycode
from
(
  select 
    userid, checktime, checktype, verifycode,
    case when checktype = lag(checktype) over (order by checktime) then 1 else 0 end
      as is_repeated
  from mytable
) marked
where is_repeated = 0
order by checktime;

答案 1 :(得分:0)

感谢Thorsten。

我们试图编写一个已经存在的整个函数。 完全按照我的需要工作。