Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.11;
Скачать: CL | DM;

Вниз

Ув. мастера. Помогите разобраться с группировкой   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
15-1147817991
Германн
2006-05-17 02:19
2006.06.11
Есть ли тут кто-нибудь из Димитровграда?


15-1147939540
kozhanov
2006-05-18 12:05
2006.06.11
Проверка орфографии


2-1148281922
deltav1
2006-05-22 11:12
2006.06.11
Время


15-1147361198
AlexanderMS
2006-05-11 19:26
2006.06.11
Эх, глюки


2-1148443939
poha
2006-05-24 08:12
2006.06.11
Прозрачность ToolBar.