일부 데이터 외에도 다음 레코드의 인덱스를 저장하는 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
마지막 레코드는 항상 올바른 위치에 있으며 알고리즘은이를 가정 할 수 있습니다.
[편집]
다음내가 생각 해낸 한 라이너 :
t exec n\[-1+count i;first i except n]from t
I :
사무실에서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 % 더 빠릅니다. –