我有一个时间值表,其中的分组中存在重复的值,但是我想删除每个分组中的所有重复值,并保持顺序(不能只说不同的值)。
如果行的顺序是这样的
+------+-----+
| 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中,我将如何遍历该列表并说出当前索引是否与先前的索引匹配,然后将其弹出。
答案 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;