【发布时间】:2020-04-15 12:52:38
【问题描述】:
我有一个超过 100 万行的大表,其中一个数字列作为主键。我正在尝试使用 Oracle sql 查询来获得大小为 500 的拆分。这样我就有了一种存储桶,每个存储桶有 500 条记录,并在该存储桶中给出它们的最大值和最小值。 样本数据
pk_column column1 column2 column3
1002 abcd 1234 15-apr-20
1004 efgh 3435 14-apr-20
1007 ijkl 8855 16-apr-20
....
....
....
2002 asdf 8565 17-apr-20
2005 efgh 5894 14-apr-20
所需的输出如下所示
bucket_no no_of_element min_value max_value
1 500 1002 2002
2 500 2005 3002
3 500 3003 4002
4 480 4003 4500
我可以使用 NTILE 或 WIDTH_BUCKET 编写的代码无法确定存储桶大小的数量,因此没有任何元素是固定的。随着元素数量不断变化,我无法找到一种方法来动态计算存储桶计数并在 NTILE 或 WIDTH_BUCKET 窗口函数中使用它。以分层方式使用 LEAD 和 LAG 函数非常令人困惑。任何人都可以建议如何解决这个问题。
【问题讨论】: