Возможно ли сделать такую выборку?

beba

Новичок
Возможно ли сделать такую выборку?

есть такой запрос:
Код:
select t.id, t.name 
from table1 t
where t.temp_id<>0 and t.id in (
 select id_for_select 
 from table2
 where id_for_select_admin<>0
 group by id_for_select
)
Так вот я хочу сделать так вот
Код:
select t.id, t.name 
from table1 t
where t.temp_id<>0 and t.id in (
 select id_for_select, max(field_date) as max_date,
 from table2
 where id_for_select_admin<>0
 group by id_for_select
)
конечно же не идет :)

Вопрос такой. Можно ли в подзапросе выбрать temp_id только тех, у кого максимальная дата, групируя по temp_id.

Пример, выше, чисто наглядный, но думаю для объяснения сойдет.

-~{}~ 13.03.06 23:54:

ОФФТОП
жаль... блин...
вот сижу, не могу с работы уйти... :(
 

baev

‹°°¬•
Команда форума
думаю для объяснения сойдет
Выходит не «сошло»

Лично мне, например, непонятно: как «группировать по temp_id», если temp_id — поле другой таблицы?

Структуры таблиц покажите и словами напишите, что хотите в результате запроса получить.
 

beba

Новичок
описался... а потом не вчитывался в то, что написал.. Будет наукой :(

локализую задачу:
Код:
select id_for_select,
 from table2
 where id_for_select_admin<>0
 group by id_for_select
============
table2
============
id_t2 int
id_for_select int
field_date datetime
============

Нужно в запрос добавить условие, чтобы выбиралось max по полю field_date_time и групировалось по id_for_select, но при этом нужно чтобы выбиралось тока одно поле id_for_select.

З.ы. В принципе, задачу, для которой нужно было это сделать, уже сделал. Остался просто инетерес, да и для опыта, чтоб было..
 

Apocalepse

Новичок
Я может быть не так понял... Может вам следует просто использовать AND?
 

chira

Новичок
beba

объяснение туманное, трудно понять что же всё таки нужно
но может это:
Код:
select id_for_select
from table2
where id_for_select_admin<>0
ORDER BY field_date DESC
LIMIT 1
 

beba

Новичок
извините, за то, что не мог правильно выразиться.
вчера был тяжелый день.

chira
твой запрос возвращает одну строку с макс. значением поля дата.

Код:
select id2
from table2
where id_for_select<>0
group by id_for_select
having "когда дата максимальна"
тока вместо "когда дата максимальна" вставить что-то, чего я не знаю.

т.е. получается пример:

id2 | id_for_select | field_date
1 | 1 | 12.03.2006
2 | 1 | 12.02.2006
3 | 2 | 10.11.2005
4 | 2 | 20.10.2005
5 | 1 | 10.03.2006
6 | 3 | 02.02.1985
7 | 4 | 03.02.1970
8 | 3 | 03.02.1985

в результате вып. запроса нужно, чтобы получ. след.
1
3
8
7
 

baev

‹°°¬•
Команда форума
У меня таблица с курсами валют за два года.
Аналогичный Вашему запрос:
Код:
SELECT b.crid FROM (SELECT *
FROM `currates` a
ORDER BY a.crdate DESC) b
WHERE b.cur <>0 
GROUP BY b.cur
 

beba

Новичок
Спасиб огромное...
я даже и не знал, что можно после таблицу можно указывать через запрос ... Просто трындец вообще, как клево...
Наверное это работает, тока с версией, которая поддерживает влож. запросы... с 4.1.13 по моему...
Так?
 

chira

Новичок
baev beba

в результате случайных совпадений указанный запрос даёт нужные нам результаты, но не может быть уверенности, что при смене версий результат останется тот же
 

zyablik

Новичок
Автор оригинала: chira
baev beba

в результате случайных совпадений указанный запрос даёт нужные нам результаты, но не может быть уверенности, что при смене версий результат останется тот же
а не вложенными запросами возможно решить данную проблемму?

на данный момент склоняюсь к решению выбрать все значения, набрать ассоциативныймассив и пхп проверять по ключу, если дата больше то перезаписывать значение
 

zerkms

TDD infected
Команда форума
zyablik
если без подзапросов - то 2 запроса

1. выбор нужных дат и соответствующим им id_for_select во временную таблицу
2. inner join временной и основной таблиц
 

zyablik

Новичок
zerkms
а можно чуть поподробнее по работе с временными таблицами
на конкретном примере, никогда не работал с ними

таблица имеет следующие поля
ID | VALUTA(varchar10) | date (int(10)-unixtimestamp) | params | city
1 | USD | 1142421300 | param | moscow
2 | USD | 1142549760 | param | moscow
3 | EUR | 1142423880 | param | moscow
4 | YEN | 1142422260 | param | moscow


надо чтобы после выборки остались строки с айдишниками 2 3 4, и выбрать все поля, тк полей в исходной таблице у каждой записи около 100 штук
и выбрать все поля,
 

Grive

Новичок
http://www.mysql.ru/docs/man/CREATE_TABLE.html -Здесь все или почти все про временные таблицы.

а использовать очень просто результат запроса помещается в эту таблицу, вторым же запросом ты с ней работаешь как и с обычной
 

zyablik

Новичок
Автор оригинала: Grive
http://www.mysql.ru/docs/man/CREATE_TABLE.html -Здесь все или почти все про временные таблицы.

а использовать очень просто результат запроса помещается в эту таблицу, вторым же запросом ты с ней работаешь как и с обычной
вопрос на засыпку
я пока всетаки склоняюсь в варианту с наполнением хеша вместо использования временной таблицы

но тут вопрос.
что будет работать быстрее?
наполнение хеша нужными айдишниками с последующей выборкой из той же таблицы или создание временной таблицы?

на данный момент объем данных около 1000,
планируемый объем около 10-15 тысяч записей
 
Сверху