2016-10-31 5 views
2

날짜, 기호 및 크기가 열인 테이블이 있다고 가정합니다. 날짜는 오름차순이며 크기는 각 날짜의 내림차순입니다. 어떻게하면 각 날짜가 극소수 만, 즉 10 개라고 기록이 보존되도록 테이블을 정리할 수 있습니까? 명령이 간단할수록 좋습니다.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