Oracle SQL查询:找出用户12345之后修改Type的文件ID
解决方案
要筛选出用户12345操作之后Type字段发生修改的文件ID,可通过以下Oracle SQL语句实现:
WITH user_12345_last_operation AS ( SELECT ID, MAX(Version) AS last_version, Type AS original_type FROM your_table_name WHERE UserId = 12345 GROUP BY ID, Type ) SELECT DISTINCT t.ID FROM your_table_name t INNER JOIN user_12345_last_operation u ON t.ID = u.ID WHERE t.Version > u.last_version AND t.Type != u.original_type AND t.Type IN ('type2', 'type3');
逻辑说明
- CTE子查询:
user_12345_last_operation分组获取每个文件ID被用户12345操作的最后版本号,以及该版本对应的Type值。 - 主查询关联:将原表与CTE结果关联,筛选出满足以下条件的记录:
- 版本号晚于用户12345最后操作的版本
- Type值与12345操作时的Type不同
- Type值为指定的
type2或type3
- 去重处理:用
DISTINCT确保每个符合条件的文件ID仅返回一次。
示例验证
针对提供的示例数据表:
- 文件ID
111111:12345最后操作版本为2,Type是type1;后续版本3的Type为type2,符合条件,被返回。 - 文件ID
222222:12345最后操作版本为1,Type是type1;后续版本2的Type为type3,符合条件,被返回。 - 文件ID
333333:无后续操作记录,不会被返回。
最终结果与预期一致,返回111111和222222。
内容的提问来源于stack exchange,提问作者A.Max
相关产品推荐
相关产品推荐

