3

日付、sym、およびサイズを列として持つテーブルがあるとします。日付は昇順、サイズは日付ごとに降順です。各日付の上位数件、たとえば 10 件のレコードのみが保持されるように、テーブルを要約するにはどうすればよいですか? コマンドは単純であるほどよい。

前もって感謝します!

4

3 に答える 3

4

与えられたテーブル:

q)show tbl:`date`val!/:(.z.d+til 3) cross 100+til 25;
    date       val
    --------------
    2016.10.31 100
    2016.10.31 101
    2016.10.31 102
    2016.10.31 103
    2016.10.31 104
    ..

日付で最初の N 行を選択: (以下の例では N=2)

q)select from tbl where i in{raze y sublist/:group x}[date;2]
    date       val
    --------------
    2016.10.31 100
    2016.10.31 101
    2016.11.01 100
    2016.11.01 101
    2016.11.02 100
    2016.11.02 101

関数を使用group- 各一意の値が発生するインデックスを含む辞書を返します。次に、関数は一意の値ごとに最初の N 個のインデックス ( sublist ) を取得します。

注意: ikdb テーブルの暗黙の行インデックスです。

于 2016-10-31T16:43:25.407 に答える
2

'fby' も適切なオプションであり、通常、グループの操作/集計が必要な場合に使用されます。

http://code.kx.com/q/ref/qsql/#fby

あなたの例では、テーブルにはすでに各日付の降順で「サイズ」列があるため、上位10行をフェッチすると目的の結果が得られます。

q) select from tbl where ({x in 10#x};i) fby date
于 2016-11-01T23:16:52.500 に答える