根据子分组合并重复的行

时间:2018-07-05 19:23:10

标签: sql sql-server

我有一个时间值表,其中的分组中存在重复的值,但是我想删除每个分组中的所有重复值,并保持顺序(不能只说不同的值)。

如果行的顺序是这样的

+------+-----+
| time | col |
+------+-----+
| 1    | A   |
| 2    | A   |
| 3    | A   |
| 4    | B   |
| 5    | B   |
| 6    | B   |
| 7    | C   |
| 8    | D   |
| 9    | E   |
| 10   | A   |
| 11   | A   |
| 12   | B   |
+------+-----+

那么应该是

+-----+
| col |
+-----+
| A   |
| B   |
| C   |
| D   |
| E   |
| A   |
| B   |
+-----+

有没有游标的方法吗?在非SQL中,我将如何遍历该列表并说出当前索引是否与先前的索引匹配,然后将其弹出。

1 个答案:

答案 0 :(得分:1)

SQL表表示无序集。您要删除的行取决于顺序,特别是相邻的相同值将被删除。

为了进行排序,数据需要指定它的列。我假设你有一个。

如果是这样,可以通过lag()轻松解决:

select col
from (select t.*, lag(col) over (order by orderingcol) as prev_col
      from t
     ) t
where prev_col <> col or prev_col is null;