我们有一张表,可以使用一年将SAT分数转换为ACT分数。如果数据在未来发生变化,我们会将新分数与分数变化的年份相加。我们需要通过一年的比分并得分并返回正确的比赛得分。
三行的样本数据将是
act sat year
28 1010 1998
29 1010 2012
30 1010 2015
如果我通过了SAT分数1010和2014年的一年,我应该返回29分的行为分数。
我编写了以下可用的SQL语句。
select act,
RANK() OVER(ORDER BY year DESC)
from keessattbl
where sat = 1010 and INT(year) <= 2014
FETCH FIRST ROW ONLY
这是处理此问题的最有效方法吗。
先谢谢道格
答案 0 :(得分:0)
我会说“当然。”它表现不佳吗?
此外,大多数DBMS都有一些方法来获取结果集的第一行,因此除非您愿意,否则不需要使用DB2。
答案 1 :(得分:0)
另一种选择是使用以下内容:
select k1.*
from keessattbl k1
where k1.sat = 1010
and k1.year = (select max(k2.year)
from keessattbl k2
where k2.sat = k1.sat
and k2.year <= 2014)
您需要检查哪一个更有效。如果year
(可能sat
)被编入索引,那么两者都可能非常快。
但是你需要查看执行计划(或简单地说明时间)才能找到答案。
答案 2 :(得分:0)
如果您不确定它是否是最有效的编写方式,那么您可以通过对查询执行EXPLAIN来检查。以另一种方式编写查询,对其进行EXPLAIN并比较成本。 IBM免费提供IBM Data Studio产品。你可以右键单击你的sql并选择Visual Explain来获得gui中的结果。