2014-09-17 2 views
1

데이터베이스가 mysql에 있습니다.
달성하고자하는 몇 가지 사항이 있습니다. 두 개의 시계열 데이터가 있습니다. 하나는 15 분 간격으로 기록하고 다른 하나는 가치 변화가 일어날 때마다 기록합니다. 나는이 두 테이블에 합류하려고 노력하고있다.
원하는 테이블은 3 열, {time_stamp, table1.value, table2.value} 및 table1과 같은 행 수입니다.
1) table1.value는 값을 유지합니다.
2) table2.value 열은 표 1의 TIME_STAMP
3) table2.value가 null의 경우 사전, 내가 가입 왼쪽으로 시도select의 group by의 마지막 항목은 null을 마지막으로 알려진 값으로 바꿉니다.

마지막으로 알려진 값을 유지 15 분 내에 표 2에서 마지막 값이 두 테이블과 "그룹"time_stamp를 시도하고 성공하지 않고 "그룹에 의해"에서 최신 항목을하려고했습니다. 또한 @n : = COALESCE (table2.value, @ n)을 사용하여 결과 열의 null 값을
"으로 바꾸려고했습니다. 합류 된 결과가 순서에 맞지 않아 작동하지 않는다고 생각합니다. 질의 끝에 질서를 추가하려고 시도 했는데도 성공하지 못했습니다.

하나의 쿼리만으로이 작업을 수행 할 수 있습니까? 어떤 도움을 주셔서 감사합니다!

테이블 1

+---------------------------------------+ 
|time      | value  | 
+---------------------------+-----------+ 
|'2014-09-15 06:15:02.1500' | 71  | 
|'2014-09-15 06:30:02.1500' | 72  | 
|'2014-09-15 06:45:02.1500' | 73  | 
|'2014-09-15 07:00:02.1500' | 74  | 
|'2014-09-15 07:15:02.1500' | 75  | 
|'2014-09-15 07:30:02.1500' | 76  | 
|'2014-09-15 07:45:02.1500' | 77  | 
+---------------------------+-----------+ 

테이블 2

+---------------------------------------+ 
|time      | value  | 
+---------------------------+-----------+ 
|'2014-09-15 06:14:02.1500' | 30  | 
|'2014-09-15 06:15:02.1500' | 55  | 
|'2014-09-15 06:18:02.1500' | 60  | 
|'2014-09-15 06:20:02.1500' | 62  | 
|'2014-09-15 06:23:02.1500' | 35  | 
|'2014-09-15 07:36:02.1500' | 45  | 
|'2014-09-15 07:38:02.1500' | 36  | 
|'2014-09-15 07:40:02.1500' | 87  | 
+---------------------------+-----------+ 

result_table

+---------------------------------------+----------+ 
|time      |table1.val |table2.val|     
+---------------------------+-----------+----------+ 
|'2014-09-15 06:15:02.1500' | 71  |30  | 
|'2014-09-15 06:30:02.1500' | 72  |35  | 
|'2014-09-15 06:45:02.1500' | 73  |35  | 
|'2014-09-15 07:00:02.1500' | 74  |35  | 
|'2014-09-15 07:15:02.1500' | 75  |35  | 
|'2014-09-15 07:30:02.1500' | 76  |35  | 
|'2014-09-15 07:45:02.1500' | 77  |87  | 
+---------------------------+-----------+----------+ 

답변

1

당신이 가치 목록에 부속을 사용할 수 있습니다

select time, value as t1value, 
coalesce(@val := (
    select value from table2 
    where time < table1.time 
     AND time >= table1.time - INTERVAL 15 MINUTE 
    order by time desc limit 1 
), @old) as t2value, @old := @val from table1; 
+0

나는 그것을 시도했다. 반환 값은 타임 스탬프까지만이 아니라 전체 테이블 -2를 보는 것이다. – Roijjer

+0

시간 조건 이 있습니다. 그게 어떻게 테이블 전체를 보는지 모르겠다. 편집 : 나는 지금 그것을 얻은 것 같아 ... – Pomyk

+0

나는 쿼리를 바꿨다. 지금 좋았어. :) – Pomyk

관련 문제