powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать выборку
13 сообщений из 13, страница 1 из 1
Как сделать выборку
    #32399835
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый:
есть таблица Test:
A B Test_ID Dif
1 a1 2 1
1 a1 3 2
1 a1 7 4
12 b1 5 11
12 b1 6 21
12 b1 7 13

Можно ли сделать запрос так, что бы результат был такой:

A B Test_ID Dif
1 a1 7 4
12 b1 6 21

т.е. записи нужно сгруппировать по полям А и Б и выбрать ту запись из группы у которой Dif максимальный(среди записей этой группы).

З.Ы. Очень надо. Уже день над этим колупаюсь.
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399896
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю:
Будет ли выполняться такой запрос Interbase- сервером?

SELECT ss.A, ss.B, test.test_id, ss.Dif
from (SELECT a, b, max(Dif) as Dif from TEST group by a,b) ss
Left join test on ss.a=test.b and ss.b=test.b and ss.dif=test.dif

При выполнении возникает ошибка:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 2.
SELECT.

Если нет, то как его надо изменить?
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399904
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не будет.
IB не умеет SELECT ... FROM (SELECT ...)
Я уже говорил.
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399907
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2:Мимопроходящий и все, все, все..
А как эти грабли можно обойти. Пример если можно. Или ссылочку на нужный ресурс
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399944
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при помощи join и having - это если в одном запросе нада
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399958
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 fedd:
Да! Надо в одном запросе. Только непонятно как это сделать с помощью вышеуказанных функций. Пример плз...
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399976
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я попытался написать, но мозг уже не работает.

надо приджоинить тест к тесту по ключам, сделать группировку и найти максимум, потом хэвингом отобрать ту запись из второго теста, где дифф равен найденному максимуму, и таким образом получим тест айди.

типа

Код: plaintext
1.
2.
3.
select max(test.diff), avg(test.testid) testtestid, avg(t.testid) tid,  test.a, test.b
from test inner join test t on test.a=t.a and test.b=t.b
group by a, b
having testtestid=tid
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399984
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avg(test.testid) testtestid, avg(t.testid) tid
- ЭТО зачем?
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399985
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долго смотрел на твой запрос.
Так и не понял, на кой фик тут avg() ?..
...
Рейтинг: 0 / 0
Как сделать выборку
    #32399991
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как гость - гостю! ;)
Код: plaintext
1.
2.
3.
4.
5.
SELECT T1.*
FROM Tab T1 JOIN Tab T2
ON (T1.A = T2.A) AND (T1.B = T2.B) AND (T1.Test_id = T2.Test_id)
AND (T2.Dif = (SELECT MAX(T3.Dif) FROM Tab T3
                   WHERE (T3.A = T2.A) AND (T3.B = T2.B)))
ORDER BY T1.A, T1.B

За сим кланяюсь, и иду пить пиво.
...
Рейтинг: 0 / 0
Как сделать выборку
    #32400008
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Мимопроходящий да и остальным тоже:
большое спасибо. заработало (только в моём случае вместо Tab - Test).
Спасибо что не бросили в бидэ.
За сим иду домой спать.
З.Ы. Окончательный вариант:

SELECT T1.*
FROM test T1 JOIN test T2
ON (T1.A = T2.A) AND (T1.B = T2.B) AND (T1.Test_id = T2.Test_id)
AND (T2.Dif = (SELECT MAX(T3.Dif) FROM test T3
WHERE (T3.A = T2.A) AND (T3.B = T2.B)))
ORDER BY T1.A, T1.B
...
Рейтинг: 0 / 0
Как сделать выборку
    #32400011
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как говорится, - "найдите 10 отличий..."
:)
...
Рейтинг: 0 / 0
Как сделать выборку
    #32400035
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДолго смотрел на твой запрос.
Так и не понял, на кой фик тут avg()?..

это опус человека с опытом mysql, где можно не у всех писать аргегирующие функции и нельзя было делать where t2.dif = select !!!

а вот интересно, сработало бы?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать выборку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]