根据行间条件查看人口
View population based on inter-row conditions
我正在尝试创建和填充一个视图,但有一些棘手的标准使我的速度很慢。
所有流入的数据都来自数据库中的其他 table。
只有当另一行(相同 table)符合给定的约束时,我才需要选择一行:例如,给定一条记录,如果:
- 它与同一个记录中的另一条记录共享 CODE table;
- 它有特定的类型;
- 它的 DATE 与另一个 TYPE 但相同的 CODE 匹配;
- 它的值大于匹配记录;
示例:
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),它具有特定的 TYPE "B" (R2) , 它与所述记录 (R3) 具有匹配日期,并且其 VALUE 大于匹配记录 (300>200)。
- 第 3 行不正确,因为日期错误;
- 第 4 行不行,因为它的值较低;
- 第 5 行代码错误;
- 第 6 行的类型错误;
这只是为了让您了解整个场景。
我想不通的是如何在同一个 table.
中进行此类行间检查
我希望我的解释足以让您了解问题!
如果我没理解错的话,你可以用 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
);
我正在尝试创建和填充一个视图,但有一些棘手的标准使我的速度很慢。 所有流入的数据都来自数据库中的其他 table。
只有当另一行(相同 table)符合给定的约束时,我才需要选择一行:例如,给定一条记录,如果:
- 它与同一个记录中的另一条记录共享 CODE table;
- 它有特定的类型;
- 它的 DATE 与另一个 TYPE 但相同的 CODE 匹配;
- 它的值大于匹配记录;
示例:
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),它具有特定的 TYPE "B" (R2) , 它与所述记录 (R3) 具有匹配日期,并且其 VALUE 大于匹配记录 (300>200)。
- 第 3 行不正确,因为日期错误;
- 第 4 行不行,因为它的值较低;
- 第 5 行代码错误;
- 第 6 行的类型错误;
这只是为了让您了解整个场景。 我想不通的是如何在同一个 table.
中进行此类行间检查我希望我的解释足以让您了解问题!
如果我没理解错的话,你可以用 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
);