【问题标题】:How to get a continuous group of id如何获得连续的一组id
【发布时间】:2021-01-21 01:36:57
【问题描述】:

我想按组增加一个 id,对于只有 2 个值的属性的每个变体。像这样:

1   banana
2   banana
3   egg
4   egg
5   banana
6   egg
7   egg

想要的结果

id   food    grp
1   banana    1
2   banana    1
3   egg       2
4   egg       2
5   banana    3
6   egg       4
7   egg       4

我尝试了带窗口函数的 dense_rank(),但我在 grp 列中只给了我 1 或 2

【问题讨论】:

    标签: sql postgresql count window-functions gaps-and-islands


    【解决方案1】:

    您可以使用窗口函数来解决这个间隙和孤岛问题。她是一个使用lag() 和一个窗口count() 的方法:

    select id, food, count(*) filter(where food is distinct from lag_food) over(order by id) grp
    from (
        select t.*, lag(food) over(order by id) lag_food
        from mytable t
    ) t
    

    逻辑是将每种食物与“前”行的值进行比较,并计算它改变了多少次。

    Demo on DB Fiddle

    编号 |食品| grp -: | :----- | --: 1 |香蕉| 高分辨率照片| CLIPARTO 1 2 |香蕉| 高分辨率照片| CLIPARTO 1 3 |鸡蛋| 2 4 |鸡蛋| 2 5 |香蕉| 高分辨率照片| CLIPARTO 3 6 |鸡蛋| 4 7 |鸡蛋| 4

    【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2023-03-12
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多