Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Вниз
Ув. мастера. Помогите разобраться с группировкой Найти похожие ветки
← →
AversFm (2006-05-25 17:34) [0]Ув. мастера. Помогите разобраться с группировкой
Имеется условная таблица из четырех полей:
ID HOLD INDATE NAME
1 Склад1 01.01.2006 Товар1
2 Склад2 04.01.2006 Товар1
3 Склад3 05.01.2006 Товар1
4 Склад1 01.01.2006 Товар2
5 Склад2 08.01.2006 Товар2
6 Склад3 02.01.2006 Товар2
Пытаюсь написать красивый запрос который возвращал бы те записи, которых дата максимальна для комбинации (HOLD, NAME). Для вышеуказанного списка это будет две записи:
3 Склад3 05.01.2006 Товар1
5 Склад2 08.01.2006 Товар2
← →
Desdechado © (2006-05-25 17:36) [1]> Пытаюсь написать
и?
что уже напытался?
← →
Johnmen © (2006-05-25 17:49) [2]Да-да, текст попыток в студию! :)
← →
AversFm (2006-05-25 17:53) [3]Опс... Не все сообщение в буфер кинул.
Ту так вот. Имеется ли способ, чтобы такого типа запросы делались
одним общим запросом? Получить максимальную дату не проблема, но как идентифицировать эту запись?
← →
Johnmen © (2006-05-25 17:56) [4]По максимальной дате в группе.
Если ты имеешь в виду, что неплохо бы узнать её ID, то надо ещё вложенный запрос в WHERE.
← →
AversFm (2006-05-25 18:01) [5]select ID, HOLD, min( INDATE), NAME
from TABLE
group by ID, HOLD, NAME
не подходит, т.к. мы получаем все записи.
select HOLD, min( INDATE), NAME
from TABLE
group by HOLD, NAME
тоже не подходит, так как мы не сможем идентифицировать записи.
← →
AversFm (2006-05-25 18:06) [6]
> По максимальной дате в группе.
> Если ты имеешь в виду, что неплохо бы узнать её ID, то надо
> ещё вложенный запрос в WHERE.
select ID, HOLD, INDATE, NAME
from TABLE
where INDATE IN ( select max(INDATE) from TABLE group by HOLD, NAME )
Например так?
Не пройдет, так как для разных камбинаций HOLD, NAME даты могут совпадать.
← →
Desdechado © (2006-05-25 18:08) [7]WHERE t.INDATE=(SELECT Max(t1.INDATE) FROM t1 WHERE t1.name=t.name)
← →
AversFm (2006-05-25 18:43) [8]
> Desdechado © (25.05.06 18:08) [7]
> WHERE t.INDATE=(SELECT Max(t1.INDATE) FROM t1 WHERE t1.name=t.
> name)
Спасибо, помогло. Теперь заработало.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.03 c