|
|
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
День добрый: есть таблица 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 максимальный(среди записей этой группы). З.Ы. Очень надо. Уже день над этим колупаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 17:16 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
Добавлю: Будет ли выполняться такой запрос 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. Если нет, то как его надо изменить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 17:54 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
Нет не будет. IB не умеет SELECT ... FROM (SELECT ...) Я уже говорил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 17:58 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
2:Мимопроходящий и все, все, все.. А как эти грабли можно обойти. Пример если можно. Или ссылочку на нужный ресурс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:01 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
при помощи join и having - это если в одном запросе нада ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:19 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
2 fedd: Да! Надо в одном запросе. Только непонятно как это сделать с помощью вышеуказанных функций. Пример плз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:25 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
я попытался написать, но мозг уже не работает. надо приджоинить тест к тесту по ключам, сделать группировку и найти максимум, потом хэвингом отобрать ту запись из второго теста, где дифф равен найденному максимуму, и таким образом получим тест айди. типа Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:43 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
avg(test.testid) testtestid, avg(t.testid) tid - ЭТО зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:49 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
Долго смотрел на твой запрос. Так и не понял, на кой фик тут avg() ?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:50 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
Как гость - гостю! ;) Код: plaintext 1. 2. 3. 4. 5. За сим кланяюсь, и иду пить пиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 18:57 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 19:10 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
Как говорится, - "найдите 10 отличий..." :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 19:13 |
|
||
|
Как сделать выборку
|
|||
|---|---|---|---|
|
#18+
авторДолго смотрел на твой запрос. Так и не понял, на кой фик тут avg()?.. это опус человека с опытом mysql, где можно не у всех писать аргегирующие функции и нельзя было делать where t2.dif = select !!! а вот интересно, сработало бы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 19:41 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32399944&tid=1579261]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 353ms |

| 0 / 0 |
