PL/SQL检查时间段,重复,最多600条记录,来自大型数据库



在最多600条记录之前的3个月内,检查是否有数据,如果没有达到600条记录,则在之前的三个月内重复,最好的方法是什么?此外,它是一个大表,因此查询整个过程可能需要几分钟时间,或者完全挂起Oracle SQL Developer。

ROWNUM似乎在返回查询结果之前为整个表提供行号,所以这似乎花费了太长时间。我们目前的做法是明确输入一个时间段,我们猜测其中会有足够的记录,然后将行限制在600行。这只需要5秒钟,但需要不断更改。

我想对每一行执行FOR循环,但在将结果数存储在查询本身之外以检查是否达到600时遇到了问题。

我也在考虑创建一个数据索引?但我对此了解不多。在抓取整张表之前,有没有一种方法可以更快地按日期对数据进行排序?

谢谢

检查在最多600条记录之前的3个月内是否有数据,如果还没有达到600条,则在之前的三个月内重复?

查找最新日期并筛选为只允许6个月内的行,然后获取前600行:

SELECT *
FROM   (
SELECT t.*,
MAX(date_column) OVER () AS max_date_column
FROM   table_name t
)
WHERE  date_column > ADD_MONTHS( max_date_column, -6 )
ORDER BY date_column DESC
FETCH FIRST 600 ROWS ONLY;

如果在最近3个月内有600人或以上,则他们将被退回;否则,它将把结果集延长到下一个3个月。


如果您打算在两个以上的3个月内重复延期,请使用:

SELECT *
FROM   table_name
ORDER BY date_column DESC
FETCH FIRST 600 ROWS ONLY;

我也在考虑创建一个数据索引?但我对此了解不多。在获取整张表之前,有没有一种方法可以更快地按日期对数据进行排序?

是的,在日期列上创建索引通常会加快筛选表的速度。

最新更新