Aloha大家,我一直在搜索有关groupoveflow的所有问题,没有人问我需要什么。这是我的疑问。 我有这张桌子:
我有很多来自同一个人的请求(ID_SOL)(ID_PERSONA)。每个人都在不同的时间制作。我希望在15分钟的时间内将它们分组。
例如:第一行的时间是上午7:23:35,这将是所有请求的组,直到上午7:38:35。然后在7:39:36 AM之后的下一个请求应该以7:39:36 AM - 7:54:36 AM的时间间隔开始一个新组。
在图像2中,您可以看到我的预期结果:
我使用此查询:
SELECT
ID_CREACION,
ID_PERSONA,
ID_MOTIVO,
ID_FEC_CREACION,
ID_FEC_CREACION+(1/1440*15) ID_FEC_MAX,
ID_NUM_SOL,
ID_SOL,
FIRST_VALUE(ID_SOL) OVER (PARTITION BY ID_CREACION,ID_PERSONA
ORDER BY ID_FEC_CREACION RANGE BETWEEN INTERVAL '15' MINUTE PRECEDING AND CURRENT ROW) ID_SOL_P,
ROW_NUMBER() OVER (PARTITION BY ID_CREACION, ID_CLIENTE, ID_FEC_CREACION, ID_FEC_CREACION+(1/1440*15) ORDER BY ID_FEC_CREACION) ID_FILA
FROM
VITAR_AGUS_SOL
但我得到了这个:
在完成第一个小组后,我无法开始新的小组。我在SQL中可以做什么?谢谢您的回答。
答案 0 :(得分:0)
有点困惑),但也许有用:
select ID_CREACION, ID_PERSONA, ID_FEC_CREACION, ID_SOL, ID_SOL_P
from VITAR_AGUS_SOL
model dimension by (
ID_CREACION,
ID_PERSONA,
row_number() OVER ( PARTITION BY ID_CREACION, ID_PERSONA
ORDER BY ID_FEC_CREACION ) ord )
MEASURES ( ID_FEC_CREACION, ID_SOL, 0 min_dt, 0 ID_SOL_P )
rules(
min_dt[ ID_CREACION, ID_PERSONA, ord > 0 ] order by ID_CREACION, ID_PERSONA, ord =
case
when ID_FEC_CREACION[ cv( ID_CREACION ), cv( ID_PERSONA ), cv( ord ) ]
- ID_FEC_CREACION[ cv( ID_CREACION ), cv( ID_PERSONA ),
min_dt[ cv( ID_CREACION ), cv( ID_PERSONA ), cv( ord ) - 1 ] ] < 15/1440
then min_dt[ cv( ID_CREACION ), cv( ID_PERSONA ), cv( ord ) - 1 ]
else cv( ord )
end,
ID_SOL_P[ ID_CREACION, ID_PERSONA, ord ] = ID_SOL[ cv( ID_CREACION ),
cv( ID_PERSONA ),
min_dt[ cv( ID_CREACION ),
cv( ID_PERSONA ), cv( ord ) ] ]
)