Вы не включаете в запрос какие-либо условия соединения.
Если таблица значений содержит 1 миллион строк, то включение ее дважды дает результат с 1 миллион * 1 миллион = 1 триллион строк.Вы применяете некоторые условия, но вы все равно будете получать огромное количество результатов.(И вы включаете таблицу значений три раза!)
Допустим, у вас есть таблица с миллионом строк, и каждая строка представляет собой целое число от 1 до 1 миллиона.Если вы сделаете select value from values where value > 900000
, вы получите 100 000 строк.Но если вы скажете select value from values v, values v2 where v.value > 900000
, то для каждой из 100 000 строк, соответствующих условию v.value > 900000
, вы получите все миллионы строк из v2.Даже если вы примените тот же фильтр к v2 (т. Е. v2.value > 900000
), запрос все равно вернет 100 000 строк v2 для каждой строки в таблице исходных значений - всего 10 миллиардов строк.
Если date
является первичным ключом таблицы, тогда вы должны убедиться, что все значения date
в каждой строке результатов одинаковы:
select v.date, v1.value, v2.value
from values v, values v1, values v2
where v.date = v1.date and v.date = v2.date
and v1.indexVar = 6 and v2.indexVar = 2
или, что еще лучше:
select v.date, v1.value, v2.value
from values v
inner join values v1 on (v1.date = v.date)
inner join values v2 on (v2.date = v.date)
where v1.indexVar = 6 and v2.indexVar = 2
Если первичный ключ - id
, просто сделайте то же самое с id
.(Вы сказали, что хотите выровнять строки на основе даты, поэтому не уверены, какой столбец является наиболее значимым.)