2014-12-07 1 views
0

У меня есть таблица, которая имеет три колонок идентификаторов, time_stamp, vm_name, cpu_usage.автообъединение таблицы, чтобы получить значения для всех комбинаций 2 колонки

В таблице нет значений для всех vm_names для каждой отметки времени.

Но мне нужен результат, который содержит значения для каждого vm_name для каждого time_stamp.

В моей таблице 4 уникальные виртуальные машины и 20 уникальных временных меток. , а таблица содержит 50 строк.

Я хочу 4 X 20 = 80 строк, которые будут возвращены, и если комбинация vm_name и time_stamp еще не присутствует, она назначит значение 0 для использования процессора.

Попытка ниже возвращает 162 строки, где я не вижу нулевого значения для значения cpuusage.

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

Добавьте 'distinct' в предложение' select'. – 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