Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с простым запросом!!!

6.3K
09 января 2004 года
jma
1 / / 09.01.2004
Здравствуйте!
Дана таблица вида: {id, ext_id, type, date}
Необходимо получить выборку id-шников, каждый элемент кот-й определяется максимальной датой для уникального набора ext_id, type. Например:
1 / 1 / 2 / 2000-01-01
2 / 1 / 3 / 2000-01-10
3 / 1 / 2 / 2000-01-15
4 / 1 / 2 / 2000-01-05
Искомая выборка:
2 / 1 / 3 / 2000-01-10
3 / 1 / 2 / 2000-01-15
те. id={2,3}
Наверное, это легко, но что-то ничего в голову не приходит!!
Заранее спасибо.
291
09 января 2004 года
gufy
703 / / 08.01.2003
не знаю по какому принципу ты определяешь простоту запроса, но это непросто. надеюсь, ты пишешь под mysql:)

проще, быстрее и производительнее сделать это с помощью temporary table - временной таблицы. я просто с ходу не могу, надо подумать.

тебе нужно сделать это для каждой уникальной пары ext_id-type? это делает задачу еще труднее.
есть также один трюк, т.н. "MAX-CONCAT TRICK", который позволяет выбирать это одним запросом, но он сложен даже для 1 уникального столбца, а для пары - надо опять же долго думать.

жди, мож придумаю. кстати см. мануалу mySQL.
...mysql/Docs/manual.html#example-Maximum-column-group-row

вот
291
10 января 2004 года
gufy
703 / / 08.01.2003
мда, все было несколько проще. хотя по сукти то же.


итак

CREATE TEMPORARY TABLE tmp(
ext_id INT,
type INT,
date DATE);

INSERT INTO tmp (SELECT ext_id,type,MAX(date) GROUP BY ext_id,type);

SELECT t.* FROM table_name AS t,tmp AS t1 WHERE (t.ext_id=t1.ext_id) AND (t.type=t1.type) AND (t.date=t1.date);

DROP TABLE tmp;

это гораздо производительнее и проще для понимая чем всякие фокусы.

для следующей таблицы:

1 1 2 2000-01-01
2 1 3 2000-01-10
3 1 2 2000-01-15
4 1 2 2000-01-05
5 1 1 2000-01-20
6 1 1 2000-02-12

выдает:

6 1 1 2000-02-12
1 1 2 2000-01-15
2 1 3 2000-01-10

если это то, что нужно, то ок, нет - пиши
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог