我有一个具有以下结构的表:
create table item_test
(item_id varchar2(10),
item_row number)
示例数据如下,请注意Item_Row
列中的数字从 1 开始,并以 1 递增为一个数字,没有任何间隙。我需要做的是([1-100] , [101-200] , [201-300] ,......)
为每个Item_Id
.
Item_Id Item_Row
------------ -----------
A 1
A 2
A ...
A ...
A 236 /* Item_Row starts from 1 and continues to 236 */
B 1
B ...
B ...
B 173 /* Item_Row starts from 1 and continues to 173 */
C 1
C 2
C ...
C ...
C 300 /* Item_Row starts from 1 and continues to 300 */
结果将如下所示:
Item_Id RowNum_From RowNum_From
------------ ----------- -----------
A 1 100
A 101 200
A 201 236
B 1 100
B 101 173
C 1 100
C 101 200
C 201 300
这有什么特定的功能吗?
诀窍是使用该
trunc
功能。这是使用纯 SQL 的解决方案:
结果:
非常好的问题-发人深省-+1!
为了解决这个问题,我做了以下事情(下面的所有代码都可以在这里找到):
结果:
这里的兴趣在于,这可能会为分析提供更多范围 - 使用不同的参数和/或不同的窗口函数。
10
例如,将in更改TRUNC((i - 1) / 10
为 a7
,您可以进行每周分析 - 请参见此处的最后一个片段。