![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с ;SELECTом [D6, Oracle]
Anders © (2002-04-23 12:41:00)Есть таблица t1:
f1 summa recnum
5 100 1
5 70 2
7 200 1
7 50 2
7 150 3
Вопрос: Как без подзапроса получить следующую выборку (по полю f1 с максимальным значением поля recnum):
f1 summa recnum
5 70 2
7 150 3
Бо с позапросом жутко тормозит (20000 записей в массиве)
Заранее благодарен.
Anders (2002-04-23 14:25:00) [1]>> MVova © (23.04.02 14:16)
Под ORACLE работает такая конструкция:
SELECT f1, min(Summa) summa, Max(recnum) recnum
FROM t1
GROUP BY F1
Но у меня вопрос в другом. см. начало дискуссии
Anders (2002-04-23 14:17:00) [2]Да, он то у меня и показывал 3с. на одно значение поля f1
MVova (2002-04-23 14:16:00) [3]>> Anders
>> Такая конструкция FROM не находит
не находит чего
у меня результат
5 70.0 2
7 50.0 3
извиняюсь но тут одна неточность если добавить еще запись
7 300 3
будет выбрана только одна из тех у которых f1 = 7
Johnmen (2002-04-23 14:15:00) [4]>Anders © : Только один вопрос : Johnmen © (23.04.02 13:50) работает или нет ?
Anders (2002-04-23 14:14:00) [5]Вдогонку: значения поля recnum формируются в представлении
Anders (2002-04-23 14:10:00) [6]Исходный массив t1 - это представление (view)
panov (2002-04-23 14:05:00) [7]>Anders
А индексы созданы?
Lusha (2002-04-23 14:05:00) [8]>Anders © (23.04.02 13:52)
А индексы задействованы?
Anders (2002-04-23 14:00:00) [9]>> MVova
>> SELECT f1, summa=min(Summa) , recnum = Max(recnum)
>> FROM t1
>> GROUP BY F1
Такая конструкция FROM не находит, и идею не понял ее
Johnmen (2002-04-23 13:58:00) [10]Ушустрить выборку можно, если не применять вложенных подзапросов,
но в твоем случае это нереально !
Anders (2002-04-23 13:52:00) [11]Спасибо, полегчало :)
Выборка по одному значению поля f1 вместо 3с. производится
за 1.3с.
Но, как в мультике,"маловато будет ...".
Как еще, можно ли, ушустрить выборку?
Бо значений поля f1 много.
MVova (2002-04-23 13:52:00) [12]SELECT f1, summa=min(Summa) , recnum = Max(recnum)
FROM t1
GROUP BY F1
Johnmen (2002-04-23 13:50:00) [13]SELECT f1, f2, f3
FROM tbltest1 T
WHERE f3 = (SELECT max(f3)
FROM tbltest1 U
WHERE T.f1=U.f1)
Железно работает !
Val (2002-04-23 13:39:00) [14]>Johnmen © (23.04.02 13:37)
не учитываете f1, выборка произойдет :
7 150 3
Johnmen (2002-04-23 13:37:00) [15]SELECT f1, summa, recnum
FROM t1 t
WHERE recnum = (SELECT max(recnum)
FROM t1)
Lusha (2002-04-23 13:21:00) [16]А так...
select f1, sum, recnum from t1
where (f1, recnum) in (select f1, max(recnum) from t1 group by f1);
Anders (2002-04-23 13:09:00) [17]Делаю так:
SELECT f1, summa, recnum
FROM t1 t
WHERE recnum = (SELECT max(recnum)
FROM t1
WHERE f1=t.f1 )
И я в печали ...
Lusha (2002-04-23 12:55:00) [18]Как без подзапроса получить следующую выборку...
А как Вы это делаете с подзапросом...