有关汇总功能的问题

时间:2019-05-24 20:18:15

标签: sql oracle window-functions

我正在尝试汇总/聚合记录,但是无法从oracle聚合函数中找到解决方案。

我一直在玩LAGCOLLECTRANK,但是找不到解决方案。

我有下表,需要为最后两个用户操作提取最后5个用户注释。

在下面的示例中,最后两个动作是Action2和Action3。

date     | user_id | user_action | user_comment
---------+---------+-------------+-------------
5/1/2019 | USER3   | OPEN        | COMMENT0
5/1/2019 | USER1   | ACTION1     | COMMENT1
5/2/2019 | USER2   | OPEN        | COMMENT2
5/3/2019 | USER2   | ACTION2     | COMMENT3
5/4/2019 | USER3   | OPEN        | COMMENT4
5/5/2019 | USER3   | OPEN        | COMMENT5
5/5/2019 | USER4   | OPEN        | COMMENT6
5/6/2019 | USER3   | OPEN        | COMMENT7
5/7/2019 | USER3   | OPEN        | COMMENT8
5/8/2019 | USER3   | OPEN        | COMMENT9
5/9/2019 | USER3   | ACTION3     | COMMENT10

重点是不应该包含User4的动作。

不应该包含注释0,因为注释0不在Action2和Action3之间,即使它与Action3是同一用户。

预期结果:

user_id | action  | comments
--------+---------+--------------------------------------------------
USER3   | ACTION3 | COMMENT10//COMMENT9//COMMENT8//COMMENT7//COMMENT5
USER2   | ACTION2 | COMMENT3//COMMENT2

任何人都可以提供提示吗?

1 个答案:

答案 0 :(得分:0)

以下查询可能需要进行一些调整。但是,它可以为您提供寻找解决方案的起点, 符合您的要求。想法/步骤:{1}通过ROW_NUMBER()为特定用户的所有条目编号。 {2}查找最后2个动作。 {3}加入2个结果集,选择最后5个条目,然后使用GROUP BY和LISTAGG()将注释放入一行。

(1000 << 40) | (100 << 20) | (3000)

DBfiddle