在 db2 中使用 row_number()

Posted

技术标签:

【中文标题】在 db2 中使用 row_number()【英文标题】:using row_number() in db2 【发布时间】:2017-03-30 06:14:52 【问题描述】:

我有以下数据,并且每当出现 userid+customerid 的组合时,我都会尝试计算每条记录。如果相同的组合在其他组合之间返回,我想再次从一个开始计数器。但是,当我在 Db2 的以下代码中使用 row_number() 时,我似乎无法让它工作,因此随着时间的推移出现的每个 userid+customerid 的计数器都在 1 处重新启动。有人有其他建议吗?非常感谢。

select userid, customer, event_name, event_timestamp,     
       row_number() over (partition by user_id, customer_number
                          order by  event_timestamp) as steps_rownum
from trackhist
order by userid, event_timestamp;

【问题讨论】:

【参考方案1】:
select userid, customer, event_name, event_timestamp,
       row_number() over (partition by userid, customer, grp
                          order by event_timestamp) as steps
from
(
    select t.*,
           (row_number() over (order by event_timestamp) -
            row_number() over (partition by userid, customer order by event_timestamp)
           ) as grp
    from trackhist t
) t
order by userid, event_timestamp

输出:

演示在这里:

Rextester

请注意,该演示使用 SQL Server,因为 DB2 不是 Rextester 的选项(至少目前如此)。但是,假设 ROW_NUMBER() 在两个数据库中的行为相同,该查询应该在 DB2 中工作。

【讨论】:

非常感谢蒂姆!这有效:D。另外,也感谢您对帖子编辑的建议。

以上是关于在 db2 中使用 row_number()的主要内容,如果未能解决你的问题,请参考以下文章

使用ROW_NUMBER()将复杂的DB2 SQL转换为mongo查询

求解:db2数据库表Tab中无id,且数据量较大,如何指定查询中间十条数据,不是前十条,谢了。

如何在此查询中使用 ROW_NUMBER? [关闭]

在 MariaDB 中使用 ROW_NUMBER() 函数的问题

db2 OLAP函数使用

如何在 Hibernate 中使用 row_number 函数编写查询?