首页 > 解决方案 > 每月 KDB/Q 查询匹配条件的行

问题描述

我想在 Q/KDB 中执行一个查询来检索满足以下条件的行。

  1. 一个月内同名的行只能完成标记。
  2. 名称应该是不同的,即如果它们满足条件 1,它们应该只显示为单数条目。

初始表:

completed name month
--------------------
yes       x    1    
no        x    1    
yes       y    2
yes       y    2    
no        a    3    
yes       a    4    
yes       b    4    
no        b    4    
no        b    4  
yes       y    5

按月份划分的初始表

completed name month
--------------------
yes       x    1    
no        x    1
---------------------    
yes       y    2
yes       y    2    
--------------------
no        a    3    
--------------------
yes       a    4    
yes       b    4    
no        b    4    
no        b    4  
--------------------
yes       y    5

结果表:

completed name month
--------------------
yes       y    2    
yes       a    4 
yes       y    5   

解释:

  1. 在第1个月,只有x进行了交易,但还没有完成一笔交易,因此它不在我们的决赛桌中。

  2. 在第2个月,只有y完成了两笔交易,因此它在我们的决赛桌中。

  3. 在第3个月,只有一笔交易但交易尚未完成。

  4. 在第4个月,ab都进行了交易,但由于b有未完成的交易,所以它被排除在外。

  5. 在第5个月,只有y交易,所以它被添加到决赛桌。

标签: kdb

解决方案


嗨 Carrein,您可以使用每个正确的副词和 fby 过滤器来使用以下内容

distinct select from tab where ({all`yes=/:x};completed)fby([]name;month)

此外,为简单起见,您可能希望对已完成的列使用布尔向量


推荐阅读