Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с ;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]

Как без подзапроса получить следующую выборку...

А как Вы это делаете с подзапросом...


Наверх

Титульная страница Поиск, карта сайта Написать письмо