首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据大型Oracle表中的日期指定指定的记录

如何根据大型Oracle表中的日期指定指定的记录
EN

Stack Overflow用户
提问于 2018-10-18 21:29:59
回答 1查看 56关注 0票数 0

我有一张大桌子,有5亿张唱片。我必须根据4个属性将这个表划分为组(分区)。

在每个组中,如果日期的差异大于或等于7天,我必须选择(设置标志)最新记录和后续记录(选择7天期间的最新条目)。

我认为这张桌子太大了,无法计算。我应该把它分成几个小的吗?但一组的所有记录都必须放在同一张桌子上。

是否有任何方法仅使用SQL指定适当的记录(而不将其获取到PL/SQL数组)?这是一次性的行动。

你知道如何解决这个问题吗?

示例(一个组属性和日期dd yyyy格式):

  1. A1 A2 A3 A4 08-05-2018 (旗标1-最新)
  2. A1 A2 A3 A4 06-05-2018 (旗0-差小于7天)
  3. A1 A2 A3 A4 01-05-2018 (旗1-差异较大/等于7天)
  4. A1 A2 A3 A4 30-04-2018 (旗0-差小于7天-相对于记录3)
  5. A1 A2 A3 A4 10-04-2018 (旗1-差异较大/等于7天-相对于记录3)
EN

回答 1

Stack Overflow用户

发布于 2018-10-19 04:27:37

由于您需要将表转换为分区,但只保留日期差大于7的记录和以前的记录,如果可能的话,我建议您尽可能删除不需要的记录。

您需要比较相邻的行,因此可以使用lag()lead()函数。

https://oracle-base.com/articles/misc/lag-lead-analytic-functions

我认为以下查询可能会有所帮助:

代码语言:javascript
运行
复制
SELECT pk, A1, A2, A3, A4, a_date
  FROM (SELECT PK, A1, A2, A3, A4, a_date,
       LAG (a_date, 1, 0)   OVER (ORDER BY A1, A2, A3, A4, a_date DESC) AS date_prev,
       a_date - LAG (a_date, 1, 0) OVER (ORDER BY A1, A2, A3, A4, a_date DESC) AS date_diff
          FROM tbl1)
 WHERE date_diff < 7

这些是你可以删除的记录。

然后,可以根据表的结构创建基于分区表列表的分区,然后在select中插入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52882881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档