Задавайте вопросы, мы ответим
Вы не зашли.
Дана таблица с данными
id type data 1 1 ... 2 1 ... 3 1 ... 4 2 ... 5 2 ... 6 3 ... 7 4 ...
Задача одим наименее трудоёмким запросом выбрать элементы с id 3, 5, 6, 7 и тп, то есть последние элементы среди type=1, type=2, type=3, type=4 и тд
GROUP BY выдает только первые.
Пока вот что надумал
SELECT id, type, data FROM table WHERE id IN (SELECT MAX(id) FROM table GROUP BY type)
указав все условия он получается "толстым". Есть варианты сделать проще?
Неактивен
Неактивен
Не подойдёт.
id вернёт, конечно последний, но data будет первой из группы
Неактивен
SELECT id, type, data
FROM table t1
JOIN (SELECT MAX(id) AS id FROM table GROUP BY type) t2 USING (id);
Подозреваю, что второй вариант будет выполнять подзапрос только один раз. А что означает слово "толстый"
в данном случае?
Неактивен
много условий в where + 2 join. Пытаюсь как-то оптимизировать запрос и единственное недопонимание у меня это невозможность решить, казалось бы не сложную задачу, более простым методом чем у описано выше.
PS удивительно что GROUP BY field DESC работает как GROUP BY field ORDER BY field DESC, а не GROUP BY field с выбором последних из схожих записей - такой подход больше подходил бы
Отредактированно Aco (27.08.2008 13:36:41)
Неактивен
можно использовать GROUP BY field ORDER BY NULL - тогда не будет неявной сортировки
Неактивен