Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / не могу составить запрос / 10 сообщений из 10, страница 1 из 1
25.04.2005, 10:34
    #33032727
Кабан Савраскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
помогите плиз.
есть 3 таблицы
t1 (t1_id int, t1_val varchar(20))
t2 (t2_id int, t2_val varchar(20))
и третья объединяет 2 первых так:
trans(t1_id int, t2_id int, dt int)
в ней может быть несколько пар сочетаний t1_id и t2_id

нужно сделать выборку, чтобы для каждой пары t1,t2 из таблицы trans выбиралось по 1 записи, такой чтобы dt была максимальной.

не представляю как это сделать без вложенных запросов

например:
t1 (1, 'Вася')
t1(2, 'Петя')

t2 (1, 'Компот')
t2 (2, 'Суп')

trans (1,1,100)
trans (1,1,200)
trans (2,1,100)
trans (2,1,150)

нужно чтобы получилась выборка
trans (1,1,200)
trans (2,1,150)
...
Рейтинг: 0 / 0
25.04.2005, 11:21
    #33032851
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
Код: plaintext
1.
SELECT T3.t1_id, T3.t2_id, MAX(T3.dt)  FROM trans T3
GROUP BY T3.t1_id, T3.t2_id
...
Рейтинг: 0 / 0
25.04.2005, 11:33
    #33032878
Кабан Савраскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
прошу прощения. кажется я вопрос задал некорректно.
в общем нужно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
drop table if exists temp3;
create temporary table temp3 (dt int, t2_id int);

insert into temp3 SELECT max( t.dt ), t.t2_id FROM t2 
        right JOIN trans t ON t2.t2_id=t.t2_id
        group by t.t2_id
ORDER BY t.dt desc;

select t1.*, t.* from temp3 left join trans t on (temp3.t2_id = t.t2_id and temp3.dt = t.dt)
left join t1 on (t1.t1_id = t.t1_id);

но без использования временных таблиц
...
Рейтинг: 0 / 0
25.04.2005, 11:54
    #33032923
Кабан Савраскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
например

Дано
cl id val
10 1 100
20 1 200
15 1 150
72 2 100
77 2 110
88 2 90
90 3 500


Должно получиться
cl id val
20 1 200
77 2 110
90 3 500

то есть для id выбирается 1 запись в которой val максимально
...
Рейтинг: 0 / 0
25.04.2005, 12:55
    #33033113
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
Код: plaintext
1.
2.
3.
4.
SELECT     t3.id, MAX(t3.v) AS Expr1, t3_1.cl, t3_1.v
FROM         t3 INNER JOIN
                      t3 t3_1 ON t3.id = t3_1.id
GROUP BY t3.id, t3_1.cl, t3_1.v
HAVING      (t3_1.v = MAX(t3.v))
...
Рейтинг: 0 / 0
25.04.2005, 12:57
    #33033118
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
Кабан Савраскиннапример

Дано
cl id val
10 1 100
20 1 200
15 1 150
72 2 100
77 2 110
88 2 90
90 3 500


Должно получиться
cl id val
20 1 200
77 2 110
90 3 500

то есть для id выбирается 1 запись в которой val максимально

Здесь без вложенного запроса не обойтись.
...
Рейтинг: 0 / 0
25.04.2005, 12:59
    #33033131
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
Mihail R.
Код: plaintext
1.
2.
3.
4.
SELECT     t3.id, MAX(t3.v) AS Expr1, t3_1.cl, t3_1.v
FROM         t3 INNER JOIN
                      t3 t3_1 ON t3.id = t3_1.id
GROUP BY t3.id, t3_1.cl, t3_1.v
HAVING      (t3_1.v = MAX(t3.v))


Запрос нерабочий, ибо ошибка в применении агрегирования в ограничении на группу.
...
Рейтинг: 0 / 0
25.04.2005, 13:00
    #33033133
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
2Johnmen

как нет
:))
...
Рейтинг: 0 / 0
25.04.2005, 13:11
    #33033170
Кабан Савраскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
вот так вроде работает как надо.
спасибо!

Код: plaintext
1.
2.
3.
4.
SELECT     t1.eq_id, t2.cl_id, t2.dt
FROM        nt t1 INNER JOIN
                      nt t2 ON t1.eq_id = t2.eq_id
GROUP BY t1.eq_id, t2.dt
HAVING      (t2.dt = MAX(t1.dt))
...
Рейтинг: 0 / 0
25.04.2005, 14:08
    #33033346
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не могу составить запрос
Mihail R.2Johnmen

как нет
:))


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


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