分享
三行代码  ›  专栏  ›  技术社区  ›  John F

sql-添加从条件开始的顺序计数器列 - SQL - add sequential counter column starting at condition

  •  1
  • John F  · 技术社区  · 1 周前

    我有一张桌子:

      id   market
      1    mkt1
      2    mkt2
      3    mkt1
      4    special
      5    mkt2
      6    mkt2
      7    special
    

    如何从表中选择所有列,同时添加一个顺序计数器列,该列在触发条件后开始计数?在本例中,当 market=="special" :

     id   market  count
     1    mkt1     0
     2    mkt2     0
     3    mkt1     0
     4    special  1
     5    mkt2     2
     6    mkt2     3
     7    special  4
    
    1 回复  |  直到 1 周前
        1
  •  1
  •   sgeddes    1 周前

    这里有一个选项使用 row_number 具有 union all :

    with cte as (
      select min(id) as id from t where market = 'special'
    )
    select t.id, t.market, 0 rn
    from t join cte on t.id < cte.id
    union all
    select t.id, t.market, row_number() over (order by t.id) rn
    from t join cte on t.id >= cte.id
    

    编辑后使用 min 编辑之后…