datetime
date
필드가 들어있는 큰 테이블이 있습니다. datetime
의 두리스트, 즉 afroms
과 atos
의리스트를 입력으로받는 함수의 일부로, 이들 각각의 afrom,ato
쌍에 대해 날짜가 큰 큰 테이블의 모든 행을 계산하고 싶습니다.이 쿼리에는 확장 성이 뛰어난 하위 선택이 있습니까?
/ t1 contains my afrom,ato pairs
q)t1:([] afrom:`datetime$(2017.10.01T10:00:00.000 2017.10.02T10:00:00.000);ato:`datetime$(2017.10.01T12:00:00.000 2017.10.02T12:00:00.000));
q)t1
afrom ato
-----------------------------------------------
2017.10.01T10:00:00.000 2017.10.01T12:00:00.000
2017.10.02T10:00:00.000 2017.10.02T12:00:00.000
/t2 contains my very very large dataset
q)t2:([] date:`datetime$(2017.10.01T10:01:00.000 2017.10.01T10:02:00.000 2017.10.01T10:03:00.000 2017.10.02T10:01:00.000 2017.10.02T10:02:00.000 2017.10.02T10:03:00.000); ccypair:(3#`EURUSD),(3#`USDCHF); mid:6?1.05);
q)t2
date ccypair mid
----------------------------------------------------
2017.10.01T10:01:00.000 EURUSD 0.24256133290473372
2017.10.01T10:02:00.000 EURUSD 0.091602176288142809
2017.10.01T10:03:00.000 EURUSD 0.10756538207642735
2017.10.02T10:01:00.000 USDCHF 0.91046513157198206
2017.10.02T10:02:00.000 USDCHF 0.76424539103172717
2017.10.02T10:03:00.000 USDCHF 0.17090452200500295
그런 다음 나는이 같은 cross
사용할 수 있습니다 :
나는이가 심각한 확장 성 단점이있다, 즉 할 수있는없는 매우 효율적인 방법 밖으로 일
select from (t1 cross t2) where afrom<date,date<ato
을이 올바른 생산 검색 결과 :
afrom ato date ccypa..
-----------------------------------------------------------------------------..
2017.10.01T10:00:00.000 2017.10.01T12:00:00.000 2017.10.01T10:01:00.000 EURUS..
2017.10.01T10:00:00.000 2017.10.01T12:00:00.000 2017.10.01T10:02:00.000 EURUS..
2017.10.01T10:00:00.000 2017.10.01T12:00:00.000 2017.10.01T10:03:00.000 EURUS..
2017.10.02T10:00:00.000 2017.10.02T12:00:00.000 2017.10.02T10:01:00.000 USDCH..
2017.10.02T10:00:00.000 2017.10.02T12:00:00.000 2017.10.02T10:02:00.000 USDCH..
2017.10.02T10:00:00.000 2017.10.02T12:00:00.000 2017.10.02T10:03:00.000 USDCH..
그러나 012의 큰 목록및 atos
cross
은 잠재적으로 큰 테이블 t2
의 크기를 t1
번 "불필요하게"확장 할 것이고 확장되지 않습니다.
더 좋은 방법이 있나요? 예 : 나는 다음과 같은 것을 시도했다.
select from t2 where (exec afrom from t1)<date,date<(exec ato from t1)
error: `length
나는 루프를 할 필요가 있지만 어떻게할지는 모르겠다. Subquestion .. afroms
및 atos
을 분리하는 대신에 간격 튜플, 즉 intervals(afrom;ato)
의 sigle 목록을 만들 수 있습니까?
답장을 보내 주셔서 감사합니다. ** 불행히도 'within'이 나를 위해 작동하지 않기 때문에 ** exclusive **이 필요함에 유의하십시오. –
실제로이 값은 값이 2 개의 창으로 떨어지면 제외되거나 경계 시간이 제외된다는 것을 의미합니까? –
안녕하세요. 토마스에게 문의 해 주셔서 감사합니다. 경계 시간은 제외되므로'within'을 사용할 수 없습니다. 'afrom, ato'가 일치하지 않으면 행이 없습니다. –