【问题标题】:Remove table duplicates under certain conditions在某些条件下删除表重复项
【发布时间】:2021-03-17 18:03:53
【问题描述】:

我有一张像下面这样的表格,它按工具(代码)显示了一些班次、成熟度等的 pnl。

仪器 123 出现两次(2 组班次、书号、insmat 但不同的 pnl)。我想清理表格以仅保留第一组(前 3 行)。

> code | shift | pnl | booknumber | insmat
  123    -20%    5     1234         2021.01.29
  123    -0%     7     1234         2021.01.29
  123    +20%    9     1234         2021.01.29
  123    -20%    4     1234         2021.01.29
  123    -0%     6     1234         2021.01.29
  123    +20%    8     1234         2021.01.29
  456    -20%    1     1234         2021.01.29
  456    -0%     2     1234         2021.01.29
  456    +20%    3     1234         2021.01.29

如果不涉及轮班,我会这样做:

select first code, first pnl, first booknumber, first insmat by code from t

很想听听您是否有解决方案! 谢谢!

【问题讨论】:

    标签: kdb


    【解决方案1】:

    如果轮班模式始终是 3 班,您可以使用

    q)select from t where 0=i mod 3
    code shift pnl booknumber insmat
    ------------------------------------
    123  20    5   1234       2021.01.29
    123  20    4   1234       2021.01.29
    456  -20   1   1234       2021.01.29
    

    fby 的替代解决方案

    q)select from t where shift=(first;shift)fby code
    code shift pnl booknumber insmat
    ------------------------------------
    123  20    5   1234       2021.01.29
    123  20    4   1234       2021.01.29
    456  -20   1   1234       2021.01.29
    

    这只有在第一个班次值在班次模式中是唯一的情况下才有效。

    【讨论】:

    • 非常感谢!第二个选项就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2019-04-21
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多