두 소스 (A 및 B)의 가격 업데이트 테이블 두 개가 다음 형식으로 제공됩니다. 다음은 밀리 초 단위로 소스 A에 대한 가격 업데이트입니다 : 나는에 인덱스 (A1, B1 등)를 표시 한MySQL에서 FULL OUTER JOIN으로 테이블 결합 및 병합
index,timestamp,origin,product,bid,ask,nexttimestamp
B1,2016-10-18 20:39:21.694,B,Dow,7005.8,7006.8,2016-10-18 20:39:27.987
B2,2016-10-18 20:39:27.987,B,Dow,7005.9,7006.9,2016-10-18 20:39:28.058
B3,2016-10-18 20:39:28.058,B,Dow,7006.0,7007.0,2016-10-18 20:39:39.792
B4,2016-10-18 20:39:39.792,B,Dow,7006.2,7007.2,2016-10-18 20:39:39.868
B5,2016-10-18 20:39:39.868,B,Dow,7006.3,7007.3,2016-10-18 20:39:45.845
:
index,timestamp,origin,product,bid,ask,nexttimestamp
A1,2016-10-18 20:39:25.595,A,Dow,7005.5,7007.5,2016-10-18 20:39:34.701
A2,2016-10-18 20:39:34.701,A,Dow,7005.8,7007.8,2016-10-18 20:39:35.703
A3,2016-10-18 20:39:35.703,A,Dow,7005.5,7007.5,2016-10-18 20:39:38.432
A4,2016-10-18 20:39:38.432,A,Dow,7005.8,7007.8,2016-10-18 20:39:44.055
A5,2016-10-18 20:39:44.055,A,Dow,7005.3,7007.3,2016-10-18 20:39:45.146
이는 밀리 초에 소스 B의 가격 업데이트됩니다 첫 번째 열. 이 테이블을 결합하고 평평하게해야합니다. 그래서 다른 소스에 대한 업데이트가 도착하면서 각 소스의 현저한 가격을 볼 수 있습니다. 필드 'timestamp'와 'nexttimestamp'는 기본적으로 가격 갱신의 유효 기간에 대한 시작 시간과 종료 시간입니다. nexttimestamp 필드는 테이블의 동일한 소스에 대한 다음 가격 업데이트를 찾아서 만듭니다.
B의 타임 스탬프가 A의 타임 스탬프보다 크고 A의 'nexttimestamp'보다 작은 테이블 A와 B를 가입해야합니다. 즉, 가격 업데이트가 유효한 경우입니다. 나는 그 이런 식으로 뭔가를 보여주고 가입 할 필요가 : 나는하지만 아무 소용이, 예를 들면 다음과 같은 쿼리를 시도하고있다
NULL, B1,2016-10-18 20:39:21.694,B,Dow,7005.8,7006.8,2016-10-18 20:39:27.987
A1,2016-10-18 20:39:25.595,A,Dow,7005.5,7007.5,2016-10-18 20:39:34.701,B1,2016-10-18 20:39:21.694,B,Dow,7005.8,7006.8,2016-10-18 20:39:27.987
A1,2016-10-18 20:39:25.595,A,Dow,7005.5,7007.5,2016-10-18 20:39:34.701,B2,2016-10-18 20:39:27.987,B,Dow,7005.9,7006.9,2016-10-18 20:39:28.058
A1,2016-10-18 20:39:25.595,A,Dow,7005.5,7007.5,2016-10-18 20:39:34.701,B3,2016-10-18 20:39:28.058,B,Dow,7006.0,7007.0,2016-10-18 20:39:39.792
A2,2016-10-18 20:39:34.701,A,Dow,7005.8,7007.8,2016-10-18 20:39:35.703,B3,2016-10-18 20:39:28.058,B,Dow,7006.0,7007.0,2016-10-18 20:39:39.792
A3,2016-10-18 20:39:35.703,A,Dow,7005.5,7007.5,2016-10-18 20:39:38.432,B3,2016-10-18 20:39:28.058,B,Dow,7006.0,7007.0,2016-10-18 20:39:39.792
A4,2016-10-18 20:39:38.432,A,Dow,7005.8,7007.8,2016-10-18 20:39:44.055,B3,2016-10-18 20:39:28.058,B,Dow,7006.0,7007.0,2016-10-18 20:39:39.792
A4,2016-10-18 20:39:38.432,A,Dow,7005.8,7007.8,2016-10-18 20:39:44.055,B4,2016-10-18 20:39:39.792,B,Dow,7006.2,7007.2,2016-10-18 20:39:39.868
A4,2016-10-18 20:39:38.432,A,Dow,7005.8,7007.8,2016-10-18 20:39:44.055,B5,2016-10-18 20:39:39.868,B,Dow,7006.3,7007.3,2016-10-18 20:39:45.845
A5,2016-10-18 20:39:44.055,A,Dow,7005.3,7007.3,2016-10-18 20:39:45.146,NULL
.
select main.*, sub.*
from test as main
left join test as sub on sub.timestamp > main.timestamp and sub.timestamp < main.nexttimestamp and sub.origin <> main.origin and sub.product = main.product
order by main.timestamp ;
그래서 하나의 테이블 또는 두 개의 테이블이 있습니까? –
두 개의 테이블. 그들은 같은 열을 가지고 있기 때문에 더 쉽게 만들면 다른 하나에 삽입 할 수 있습니다. 그들은 두 개의 다른 소스에서 오는 것처럼 분리되어 있습니다. – user2146441