通过更改分组列来分组数据并保持顺序Amazon Aurora(MySQL 5.6)

时间:2019-07-16 14:14:03

标签: mysql sql hibernate

我有一个表(下面是简化版),其中包含事件发生时带有时间戳的事件信息。当按 id 排序,然后使用 timestamp 排序时,我具有以下时间轴:

id      status      timestamp
5       1           2018-11-26 07:38:10
5       1           2018-11-26 07:37:10
5       1           2018-11-26 07:36:10
5       0           2018-11-26 07:35:10
5       0           2018-11-26 07:34:10
5       0           2018-11-26 07:33:10
5       0           2018-11-26 07:32:10
8       1           2019-07-16 12:33:22
8       1           2018-11-26 07:37:10
8       0           2018-11-26 07:36:10
8       0           2018-11-26 07:34:10
8       1           2018-11-26 07:33:10

我需要编写一个查询,以相同的状态对事件进行分组,直到事件被更改(我需要保持顺序),跟踪开始结束时间戳和事件的发生次数,直到状态更改为止。

结果应类似于下表

id      status      Start timestamp         end timestamp           count 
5       1           2018-11-26 07:38:10     2018-11-26 07:36:10     3
5       0           2018-11-26 07:35:10     2018-11-26 07:32:10     4     
8       1           2019-07-16 12:33:22     2018-11-26 07:37:10     2
8       0           2018-11-26 07:36:10     2018-11-26 07:34:10     3
8       1           2018-11-26 07:33:10     2018-11-26 07:33:10     1

我知道我可以使用ROW_NUMBERS()解决问题,但据我所知,Amazon Aurora等同于MySQL 5.6,因此不支持它。

此刻,我停留在如何遍历结果列表和分组的事情上。我正在尝试类似的嵌套查询,并尝试在此基础上构建


SELECT *
      # , min(reported_timestamp), max(reported_timestamp), count(*)
FROM (
    SELECT id, status, reported_timestamp
        FROM table AS td 
            #GROUP BY id, status
            #, reported_timestamp
            ORDER BY id, reported_timestamp DESC
    ) k
# GROUP BY id, status
;

我对查询还有另一个担心,因为它需要分页,而我为此使用了Spring Boot和Hibernate。

我还可以编写Java代码来迭代并在应用程序中创建对象,但是我们有数百万条记录,这可能会非常慢。

0 个答案:

没有答案