sql - 基于子分组合并重复行
问题描述
我有一个时间值表,其中在分组中存在重复值,但我想为每个分组删除除一个之外的所有值并保持顺序(不能只说不同的值)。
如果行的顺序是这样的
+------+-----+
| 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 中的做法是遍历列表并说当前索引是否与前一个索引匹配,然后弹出它。
解决方案
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;
推荐阅读
- python - Python - 在循环中创建日志文件并将其输出到不同的文件夹
- android - 如何为另一个 ViewModel 中的对象属性派生 ViewModel?
- react-native - 为什么任何创建的颜色框都没有出现在模拟器上?
- c - 如何在嵌入式 C 中生成 UUID
- javascript - 在放大的弹出窗口中显示动态内容
- python - python 2.6.6可以使用哪个版本的pylint?
- c# - 如何在 Azure 管理 SDK 中通过一次登录访问所有租户和订阅
- tensorflow - 在 TensorFlow V.2 Astroid 安装过程中的 TensorFlow 错误和 AttributeError: module tensorflow has no attribute Session
- spring - 我如何在同一个 IntegrationFlows 构建器中发布和使用 Kafka 消息
- machine-learning - 使用 AI 查找函数的最大值