sql - SQL 或 LINQ:如何选择只有一个参数更改的记录?
问题描述
假设我们有这个列表:
Id IdRef myColumn anotherColumn
448 70 1 228
449 70 1 2s8
451 70 1 228
455 70 2 2a8
456 70 2 s28
457 70 2 28
458 70 3 v
459 70 3 28
460 70 4 22
461 70 3 54
462 70 4 45
463 70 3 s28
每次“myColumn”更改时,我都需要选择一个包含记录的列表。所以结果是:
Id IdRef myColumn anotherColumn
448 70 1 228
455 70 2 2a8
458 70 3 v
460 70 4 22
461 70 3 54
462 70 4 45
463 70 3 s28
解决方案
这是一个空白和孤岛问题。在 SQL 中,这是使用窗口函数解决它的一种方法:
select Id, IdRef, myColumn, anotherColumn
from (
select t.*, lag(myColumn) over(partition by IdRef order by Id) lagMyColumn
from mytable t
) t
where lagMyColumn is null or lagMyColumn <> myColumn
内部查询恢复上一行的值,myColumn
按排序。然后外部查询过滤该值与当前行上的值不同的记录。Id
编号 | idref | 专栏 | 另一栏 --: | ----: | --------: | :------------ 448 | 70 | 1 | 228 455 | 70 | 2 | 2a8 第458章 70 | 3 | v 460 | 70 | 4 | 22 461 | 70 | 3 | 54 第462章 70 | 4 | 45 第463章 70 | 3 | s28
推荐阅读
- liferay - 在 Liferay 上发布时出错,没有类 StagedModelDataHandlerRegistryUtil
- javascript - 将多个连续字符替换为其最后一次出现
- java - 如何根据枚举值验证休息请求中的字符串字段?
- google-cloud-firestore - Firestore 数据库是否适合这种时间序列数据,还是我应该实现其他东西?
- c - 用于 qsort 结构的多种类型字段的自定义比较功能
- mysql - 通过忽略列中的 0 值来计算平均值
- rest - ActiveMQ Artemis 上的 REST 接口
- asp.net-core-mvc - ASP .NET Core MVC 使用登录的用户外键将文本文件上传到现有数据库
- amazon-web-services - 尝试通过 terraform 设置 cloudwatch 日志过滤器时出现 InvalidParameterException
- java - 如何获取显示名称“电子邮件”?