【发布时间】:2010-01-15 14:44:22
【问题描述】:
我有一个表格,其中包含按地点划分的成本历史记录。这些每月更新一次。 例如
Location1, $500, 01-JAN-2009
Location1, $650, 01-FEB-2009
Location1, $2000, 01-APR-2009
如果我查询 3 月 1 日,我想返回 2 月 1 日的值,因为 3 月 1 日不存在。 我已经使用 oracle 分析编写了一个查询,但这需要花费太多时间(对于报告来说这很好,但我们使用它来允许用户通过前面和切换日期直观地查看数据,重新查询需要太长,只要表是 100 万行)。 所以,我的下一个想法是简单地用丢失的数据更新表。在上述情况下,我只需添加一条与 01-FEB-2009 相同的记录,只是将日期设置为 01-MAR-2009。
我想知道你们是否都想过如何最好地做到这一点。 我的计划是简单地为一个位置创建一个游标,获取第一条记录,然后获取下一条记录,如果下一条记录不是下个月的,则插入缺失月份的记录。
更多信息:
CREATE TABLE MAXIMO.FCIHIST_BY_MONTH
(
LOCATION VARCHAR2(8 BYTE),
PARKALPHA VARCHAR2(4 BYTE),
LO2 VARCHAR2(6 BYTE),
FLO3 VARCHAR2(1 BYTE),
REGION VARCHAR2(4 BYTE),
AVG_DEFCOST NUMBER,
AVG_CRV NUMBER,
FCIDATE DATE
)
然后是我正在使用的查询(系统将传递日期和 parkalpha)。该表大约有 100 万行,同样,虽然报告需要相当长的时间,但交互式显示需要的时间太长了
select location, avg_defcost, avg_crv, fcimonth, fciyear,fcidate from
(select location, avg_defcost, avg_crv, fcimonth, fciyear, fcidate,
max(fcidate) over (partition by location) my_max_date
from FCIHIST_BY_MONTH
where fcidate <='01-DEC-2008'
and parkalpha='SAAN'
)
where fcidate=my_max_date;
【问题讨论】:
-
顺便说一句,我修复了我的索引,现在它运行得非常快。当然,他们现在正在改变要求,所以......