在db2中使用row_number()

时间:2017-03-30 06:14:52

标签: sql db2

我有以下数据,每当出现一个userid + customerid组合时,我都会尝试计算每条记录。如果相同的组合在其他组合之间返回,我想再次启动计数器。但是,当我在Db2中的以下代码中使用row_number()时,我似乎无法使其正常运行,以便计数器在1时为每个随时间出现的userid + customerid重新启动。有没有人有其他建议?非常感谢你。

enter image description here

class Transaction(Base):
    __table__ = Table('transaction', metadata,
                      Column('transaction_id', Integer, primary_key=True), 
                      Column('seller_id', Integer, ForeignKey('users.user_id')),
                      Column('buyer_id', Integer, ForeignKey('users.user_id')),
                      autoload=True)
    seller = relationship('User', foreign_keys=[__table__.c.seller_id])
    buyer = relationship('User', foreign_keys=[__table__.c.buyer_id])

1 个答案:

答案 0 :(得分:0)

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

<强>输出:

enter image description here

在这里演示:

Rextester

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