kdb/Q如何筛选1_Day_Time和2_Day_Time至少一列非空的行?
在kdb/Q中筛选至少一列非空的行
原始数据
| ID | Name | 1_Day_Time | 2_Day_Time |
|---|---|---|---|
| 2B | May | 762 | |
| 8D | Air | 142 | |
| W2 | Tim | 908 | 332 |
| 9H | Bee | ||
| 5E | Ice | 712 |
需求
筛选出1_Day_Time和2_Day_Time中至少一列不为null的行,移除两列均为null的ID=9H的行,预期输出如下:
预期输出
| ID | Name | 1_Day_Time | 2_Day_Time |
|---|---|---|---|
| 2B | May | 762 | |
| 8D | Air | 142 | |
| W2 | Tim | 908 | 332 |
| 5E | Ice | 712 |
解决方案
假设你的表名为t,可以用以下两种简洁写法实现筛选:
- 显式判断非空的写法:
select from t where not null 1_Day_Time | not null 2_Day_Time
- 更简洁的布尔逻辑写法(kdb/Q中,非null值在逻辑判断中视为真,null视为假):
select from t where 1_Day_Time | 2_Day_Time
说明
在kdb/Q中,数值列的null用0N表示,逻辑或操作(|)会将非null值判定为真,null判定为假。只要1_Day_Time或2_Day_Time任意一列非null,该行就会被保留;两列均为null时,逻辑或结果为假,该行会被过滤。
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

