我正在尝试创建并填充视图,但是有一些棘手的标准让我的速度变慢了。 流入的所有数据都来自数据库中的其他表。
我只需要在另一行(同一个表)符合给定约束时选择一行:例如,给定一条记录,我会在以下情况下接受:
的示例:
1. CODE1 - TYPE.A - 01/12 - 200
2. CODE1 - TYPE.B - 01/12 - 300
3. CODE1 - TYPE.B - 01/09 - 300
4. CODE1 - TYPE.B - 01/12 - 100
5. CODE2 - TYPE.B - 01/12 - 200
6. CODE1 - TYPE.A - 01/12 - 300
在上面的记录中,我只会排第2行,因为它与一行TYPE“A”(约束1)共享CODE,它有一个TYPE“B”(R2),它与之匹配所述记录(R3),其VALUE大于匹配记录(300> 200)。
这只是为了给你一张整个场景的照片。 我无法理解的是如何在同一个表格中进行这种行间检查。
我希望我解释自己,为了解决这个问题,我们应该为你做好准备!
答案 0 :(得分:1)
如果我理解正确,您可以使用join
:
select t.*
from t join
t tt
on t.code = tt.code and
t.date = tt.date
t.type = 'Type.B' and
tt.type = 'Type.A' and
t.value > tt.value;
或等效地,exists
:
select t.*
from t
where exists (select 1
from tt
where t.code = tt.code and
t.date = tt.date
t.type = 'Type.B' and
tt.type = 'Type.A' and
t.value > tt.value
);