次のレコードのインデックスを格納するある種のデータに加えてn
列を持つテーブルがあります。たとえば、レコードの順番を回復する
q)show t:([]x:"cbad";n:3 0 1 4)
x n
---
c 3
b 0
a 1
d 4
この情報からレコードの順序を復元する方法を探しています。正しい順序上記の例でabcd
とn
カラムはc
がb
がa
がb
続いて、c
続いて、d
が続いていることを教えてくれる、そしてd
は、最後のレコード(n
で範囲指標のうちに注意していますカラム)。
q)select x,next_x:x n from t
x next_x
--------
c d
b c
a b
d
最後のレコードはいつも最後に来ており、アルゴリズムはこれを仮定しています。
[EDIT]
ここに私が思い付いたワンライナーです:私は
t exec n\[-1+count i;first i except n]from t
:オフィスで
q)t exec n\[-1+count n;]first where @[(1+count n)#1b;n;:;0b] from t
x n
---
a 1
b 0
c 3
d 4
私は自分のソリューションをやや簡略化しました。現実的なテストケースでは、あなたのソリューションより約10%速くなっています。 –