【发布时间】:2013-06-25 15:07:38
【问题描述】:
我正在尝试使用相关子查询,但我正在尝试将其限制为“最佳”记录。当我使用与以下内容非常相似的 SQL 时,每个 BigTable.identifier 有两行,我希望只有一个。在“UNION”语句中,后半部分比前半部分更可取。但是,有时需要前半部分。有任何想法吗?代码如下:
select
BigTable.identifier,
Correlated.ID,
Correlated.Effective_Date,
Correlated.Period_Number
from
BigTable
inner join
(
select
TOP 2147483647
Table3.identifier,
Table4.Effective_Date,
Table4.Period_Number
from
Table3
inner join Table4 on Table3.matching_key = Table4.matching_key
where
Table4.Period_Number = 0
order by Table4.Effective_Date desc
UNION
select
TOP 2147483647
Table3.Identifer,
Table4.Effective_Date,
Table4.Period_Number
from
Table3
inner join Table5 on Table3.matching-key = Table5.matching-key
inner join Table4 on Table5.key1 = Table4.key1 and
Table5.key2 = Table4.key2
where
Table4.period_number = 1
order by Table4.Effective_Date desc
) as Correlated
on BigTable.identifier = Correlated.identifier
【问题讨论】:
-
你不会说你如何决定哪个更好。也许内部查询本身可以过滤掉存在符合 UNION 其他部分的记录的记录。也许可以将某种类型的排名或分数分配给 UNION 的每一行,以让较高的“获胜”。取决于您将如何确定留下哪一个的细节。
-
我想通过从联合声明中获取最高记录并根据 period_number desc 进行排名来选择“最佳”(即,下半部分的 1 优于上半部分的 0 ),以及最迟生效日期。但是,我不知道将“top 1”语句放在哪里,并且仍然从 BigTable 中获取所有记录。