代码之家  ›  专栏  ›  技术社区  ›  Shadowpulse

kdb:自连接以选择带条件的重复项

  •  0
  • Shadowpulse  · 技术社区  · 1 年前

    我有一张桌子:

    t  value 
    ---------
    A    MT 
    A    RX
    B    SD
    B    RX
    A    RX 
    C    SD
    

    我想为选择通用值 t=A 与其他 t 但没有重复:

    预期产量:

    t  value 
    ---------
    A    RX
    B    RX
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   Cathal O'Neill    1 年前

    这是一个冗长的解决方案,所以让我把它分解一下

    q)distinct select from tab where val in exec val from select from tab where t<>`A,val in exec val from tab where t=`A
    t val
    -----
    A RX
    B RX
    

    在第一部分中,我们 exec 值在哪里 t=`A

    q)exec val from tab where t=`A
    `MT`RX`RX
    

    我们在查询的下一部分中使用此列表,该部分从表中选择值在此列表中的位置,以及 t<>`A

    q)select from tab where t<>`A,val in exec val from tab where t=`A
    t val
    -----
    B RX
    

    我们使用上一个查询中的值从表中进行选择

    q)select from tab where val in exec val from select from tab where t<>`A,val in exec val from tab where t=`A
    t val
    -----
    A RX
    B RX
    A RX
    

    最后,使用 distinct 删除重复项

    q) 区别于从选项卡中选择,其中val在exec-val中,区别于从标签中选择,t<>`A,从选项卡执行val中的val,其中t=`A
    t val
    -----
    RX
    B RX
    

    注: 自从 value 是一个q关键字,建议不要将其用作表中的列名。