代码之家  ›  专栏  ›  技术社区  ›  Chechy Levas

如何将此嵌套查询转换为单个by查询(模拟MySql窗口函数)?

kdb
  •  0
  • Chechy Levas  · 技术社区  · 3 年前

    给定以下内容

    \S 1234
    t:([]a:10 ? til 5; b:10 ? til 100; c:10 ? til 10000);
    
    select a,b,c from ij[t; select maxc:max c by a from t] where c=maxc;
    

    是否可以让q选择每个窗口中的第一条记录(按a分组,按c降序排序),而不是加入内部查询作为过滤器的一部分?如果是这样,就不需要加入。

    结果是一样的。然后我可以进行测试,看看性能是否不同。但主要是试图了解什么类型的查询是不可能的和不可能的。

    0 回复  |  直到 3 年前
        1
  •  4
  •   SeanHehir    3 年前

    你可以试试 fby 与您当前查询的结果相匹配

    q)select from t where c = (max;c) fby a
    a b  c
    ---------
    2 2  5480
    3 39 9473
    4 77 6458
    

    https://code.kx.com/q/ref/fby/