2016-10-31 4 views
2

日付、記号、サイズを列として持つテーブルがあるとします。日付は昇順になり、サイズは降順に日付ごとに表示されます。どのようにしてテーブルを消化するのですか?毎日、最少の数しかないと言います。より簡単にコマンドを実行できます。kdbを使用して日付の上位レコード数を出力する

ありがとうございます!表考える

答えて

3

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)を取得します。

NB:iは、kdbテーブルの暗黙の行インデックスです。

0

'fby'も良いオプションであり、グループの操作/集計が必要な場合に一般的に使用されます。あなたの例で

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

、テーブルはまだトップ10行が所望の結果を与えるフェッチ各日付の順序を降順に「サイズ」COLを有しているからです。

q) select from tbl where ({x in 10#x};i) fby date 
関連する問題