如何在 KDB 查询中进行自连接?
How do you do a self join in a KDB query?
是否可以在 KDB 中执行以下操作:
(给你相当于 SQL)
select column1
from table1 alias1
join table1 alias2
where alias1.column2 = alias2.column2
是的,例如:
q)t:([]k: 1 2 1; v:`A`B`C)
q)ej[`k;t;t]
k v
---
1 A
1 C
2 B
1 A
1 C
更新:您可以根据需要过滤结果:
q)select from ej[`k;t;t] where (v=`A) or k=2
k v
---
1 A
2 B
1 A
更新 2: 如果您只需要找到重复项,则根本不需要自行加入 table:
q)t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
q)select from t where 1<(count;v)fby v
k v
---
1 A
3 A
4 C
5 C
对于第二个问题(不会让我评论,所以在这里添加),你可以做如下的事情
t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
select from t where v in (exec v from (select count i by v from t) where x>1)
ungroup select from (`v xgroup t) where (count each k)>1
是否可以在 KDB 中执行以下操作:
(给你相当于 SQL)
select column1
from table1 alias1
join table1 alias2
where alias1.column2 = alias2.column2
是的,例如:
q)t:([]k: 1 2 1; v:`A`B`C)
q)ej[`k;t;t]
k v
---
1 A
1 C
2 B
1 A
1 C
更新:您可以根据需要过滤结果:
q)select from ej[`k;t;t] where (v=`A) or k=2
k v
---
1 A
2 B
1 A
更新 2: 如果您只需要找到重复项,则根本不需要自行加入 table:
q)t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
q)select from t where 1<(count;v)fby v
k v
---
1 A
3 A
4 C
5 C
对于第二个问题(不会让我评论,所以在这里添加),你可以做如下的事情
t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
select from t where v in (exec v from (select count i by v from t) where x>1)
ungroup select from (`v xgroup t) where (count each k)>1