2014-12-07 3 views
0

의 모든 조합에 대한 값을 얻을 수있는 테이블을 조인 나는이 세 개의 열 ID, TIME_STAMP, vm_name, 이 cpu_usage이있는 테이블.자체는 2 열

표에는 모든 타임 스탬프에 대한 모든 vm_names 값이 없습니다.

하지만 모든 time_stamp에 대해 모든 vm_name 값을 포함하는 결과를 원합니다.

내 테이블에는 4 개의 고유 VM과 20 개의 고유 한 타임 스탬프가 있습니다. 이고 테이블에는 50 개의 행이 있습니다.

4 x 20 = 80 행을 반환하고 vm_name과 time_stamp의 조합이 아직없는 경우 CPU 사용에 0 값을 할당합니다.

아래의 시도는 162 개의 행을 반환하는데, 여기서 cpuusage 값이없는 null 값은 표시되지 않습니다. 여기

select t1.timestamp,t2.timestamp,t1.vm_name,t2.vm_name,t1.cpuUsage, t2.cpuUsage from  `VM_monitoring_5min t1` 
right join VM_monitoring_5min t2 
on t1.timestamp = t2.timestamp 

는 SQL 바이올린 http://sqlfiddle.com/#!2/998e0/1

+1

당신은 바이올린에 샘플 테이블을 제공 할 수 있습니까? 다른 사람들이 쉽게 알 수 있도록 도와줍니다. –

+0

'select' 절에'distinct'를 추가하십시오. – Ashalynd

답변

0
select distinct n.vm_name 
      , c.timestamp 
      , coalesce(t1.cpuUsage,0) 
     from VM_monitoring_5min n 
     join VM_monitoring_5min c 
     left 
     join VM_monitoring_5min t1 
     On t1.vm_name = n.vm_name 
     and t1.timestamp = c.timestamp 

http://sqlfiddle.com/#!2/998e0/3

0

크로스 모두 별개의 vm_name와 타임 스탬프를 조인 다음 테이블에 가입 떠났다.

select n.vm_name,c.timestamp,coalesce(t1.cpuUsage,0) 
from 
    (select distinct vm_name from VM_monitoring_5min) as n 
    cross join 
    (select distinct timestamp from VM_monitoring_5min) as c 
    left join 
    VM_monitoring_5min t1 
    on n.vm_name = t1.vm_name and c.timestamp = t1.timestamp 
; 

테스트 Sql Fiddle Demo.

+0

이것은 간단해질 수 있습니까? – Strawberry