在 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,且数据量较大,如何指定查询中间十条数据,不是前十条,谢了。